<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devhrxoobm.itwiki.kr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Retrospect</id>
	<title>IT 위키 - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://devhrxoobm.itwiki.kr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Retrospect"/>
	<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/w/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Retrospect"/>
	<updated>2026-09-16T22:04:31Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_pip&amp;diff=40471</id>
		<title>파이썬 pip</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_pip&amp;diff=40471"/>
		<updated>2025-03-26T00:27:30Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: pip는 파이썬 패키지 관리자(Package Installer for Python)로, Python Package Index(PyPI) 등에서 다양한 파이썬 패키지를 설치, 업그레이드, 삭제할 수 있는 도구이다.  == 개요 == pip는 파이썬의 공식 패키지 설치 도구로, 파이썬 2.7.9 이상과 파이썬 3.4 이상 버전에 기본 포함되어 있다. 이를 통해 개발자는 인터넷 상의 다양한 오픈소스 라이브러리를 쉽게 설치할 수 있으며, 패키지...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pip는 파이썬 패키지 관리자(Package Installer for Python)로, Python Package Index(PyPI) 등에서 다양한 파이썬 패키지를 설치, 업그레이드, 삭제할 수 있는 도구이다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
pip는 파이썬의 공식 패키지 설치 도구로, 파이썬 2.7.9 이상과 파이썬 3.4 이상 버전에 기본 포함되어 있다. 이를 통해 개발자는 인터넷 상의 다양한 오픈소스 라이브러리를 쉽게 설치할 수 있으며, 패키지 의존성과 버전 관리를 효율적으로 수행할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 주요 기능 ==&lt;br /&gt;
* 패키지 설치: PyPI나 기타 저장소에서 원하는 패키지를 자동으로 다운로드 및 설치&lt;br /&gt;
* 패키지 업그레이드: 설치된 패키지를 최신 버전으로 갱신&lt;br /&gt;
* 패키지 삭제: 필요 없는 패키지를 간편하게 제거&lt;br /&gt;
* 의존성 관리: 패키지 설치 시 필요한 하위 패키지를 자동으로 해결&lt;br /&gt;
* 설치된 패키지 목록 조회: pip list 또는 pip freeze 명령어를 통해 현재 설치된 패키지와 버전을 확인&lt;br /&gt;
&lt;br /&gt;
== 설치 및 업데이트 ==&lt;br /&gt;
대부분의 최신 파이썬 버전에는 pip가 기본으로 포함되어 있으나, 필요에 따라 최신 버전으로 업데이트할 수 있다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python -m pip install --upgrade pip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 기본 사용 예제 ==&lt;br /&gt;
다음은 pip의 주요 명령어 사용 예제이다.&lt;br /&gt;
&lt;br /&gt;
=== 패키지 설치 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install requests&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
위 명령어는 PyPI에서 requests 패키지를 설치한다.&lt;br /&gt;
&lt;br /&gt;
=== 패키지 업그레이드 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install --upgrade requests&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
설치된 requests 패키지를 최신 버전으로 업그레이드한다.&lt;br /&gt;
&lt;br /&gt;
=== 패키지 삭제 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip uninstall requests&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
설치된 requests 패키지를 제거한다.&lt;br /&gt;
&lt;br /&gt;
=== 설치된 패키지 목록 조회 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
또는&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip freeze&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
명령어를 통해 현재 가상 환경이나 시스템에 설치된 패키지 목록과 버전을 확인할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 다양한 명령어 옵션 ==&lt;br /&gt;
pip는 여러 옵션을 지원하여 패키지 관리에 유연성을 제공한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;--no-cache-dir&amp;lt;/code&amp;gt;: 캐시를 사용하지 않고 패키지를 설치한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;--user&amp;lt;/code&amp;gt;: 시스템 전역이 아닌 사용자 디렉터리에 패키지를 설치한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;--force-reinstall&amp;lt;/code&amp;gt;: 이미 설치된 패키지라도 강제로 재설치한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ignore-installed&amp;lt;/code&amp;gt;: 기존에 설치된 패키지를 무시하고 새로 설치한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;--proxy&amp;lt;/code&amp;gt;: 프록시 서버를 통해 패키지를 설치할 때 사용한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;--timeout&amp;lt;/code&amp;gt;: 설치 과정에서의 타임아웃 시간을 지정한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;--upgrade-strategy&amp;lt;/code&amp;gt;: 업그레이드 시 하위 의존성 패키지 처리 방식을 지정한다. 예를 들어, &amp;quot;eager&amp;quot; 또는 &amp;quot;only-if-needed&amp;quot; 옵션이 있다.&lt;br /&gt;
&lt;br /&gt;
예제:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install numpy --no-cache-dir --upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
위 명령어는 캐시를 사용하지 않고 numpy 패키지를 최신 버전으로 업그레이드하며 설치한다.&lt;br /&gt;
&lt;br /&gt;
== requirements.txt ==&lt;br /&gt;
요구 사항 파일(requirements.txt)은 프로젝트에서 필요한 패키지와 해당 버전을 명시한 텍스트 파일이다. 이를 이용하면 협업 시 동일한 개발 환경을 쉽게 재현할 수 있다.&lt;br /&gt;
* requirements.txt 작성 예제:&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
requests==2.25.1&lt;br /&gt;
numpy&amp;gt;=1.19.0&lt;br /&gt;
pandas&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* requirements.txt를 이용한 패키지 설치:&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 설치된 패키지 목록을 requirements.txt로 저장:&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip freeze &amp;gt; requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 활용 및 중요성 ==&lt;br /&gt;
pip는 파이썬 생태계의 핵심 도구로, 다양한 라이브러리와 모듈을 손쉽게 관리할 수 있게 해준다. 특히, 가상 환경과 함께 사용하면 프로젝트별로 독립적인 패키지 관리가 가능해져, 개발 환경의 일관성과 재현성을 확보할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[파이썬 가상 환경]]&lt;br /&gt;
* [[패키지 관리 (파이썬)]]&lt;br /&gt;
* [[venv]]&lt;br /&gt;
* [[virtualenv]]&lt;br /&gt;
* [[Conda]]&lt;br /&gt;
&lt;br /&gt;
== 참고 문헌 ==&lt;br /&gt;
* Python 공식 문서, &amp;quot;pip — The Python Package Installer&amp;quot;, https://pip.pypa.io&lt;br /&gt;
* Python Packaging Authority (PyPA)&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC&amp;diff=40470</id>
		<title>파이썬 딕셔너리</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC&amp;diff=40470"/>
		<updated>2025-03-26T00:23:18Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: 파이썬 딕셔너리(Dictionary)는 키(key)와 값(value)의 쌍으로 데이터를 저장하는 자료형으로, 연관 배열 또는 해시맵(HashMap)으로도 알려져 있다. 키를 통해 값을 빠르게 조회할 수 있으며, 중괄호({})를 사용하여 정의한다. ==개요== 딕셔너리는 변경 가능(mutable)하고 순서가 있는(파이썬 3.7 이상) 컬렉션 자료형이다. 각 키는 유일해야 하며, 값은 중복될 수 있다. 키는 문자열...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;파이썬 딕셔너리(Dictionary)는 키(key)와 값(value)의 쌍으로 데이터를 저장하는 자료형으로, 연관 배열 또는 해시맵(HashMap)으로도 알려져 있다. 키를 통해 값을 빠르게 조회할 수 있으며, 중괄호({})를 사용하여 정의한다.&lt;br /&gt;
==개요==&lt;br /&gt;
딕셔너리는 변경 가능(mutable)하고 순서가 있는(파이썬 3.7 이상) 컬렉션 자료형이다. 각 키는 유일해야 하며, 값은 중복될 수 있다. 키는 문자열, 숫자, 튜플 등 해시 가능한(immutable) 자료형만 가능하다.&lt;br /&gt;
==생성 방법==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# 빈 딕셔너리&lt;br /&gt;
a = {}&lt;br /&gt;
&lt;br /&gt;
# 초기값을 포함한 딕셔너리&lt;br /&gt;
person = {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;Alice&amp;quot;,&lt;br /&gt;
    &amp;quot;age&amp;quot;: 30,&lt;br /&gt;
    &amp;quot;city&amp;quot;: &amp;quot;Seoul&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==주요 기능 및 메서드==&lt;br /&gt;
===항목 접근 및 수정===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(person[&amp;quot;name&amp;quot;])        # Alice&lt;br /&gt;
person[&amp;quot;age&amp;quot;] = 31           # 값 수정&lt;br /&gt;
person[&amp;quot;job&amp;quot;] = &amp;quot;Engineer&amp;quot;   # 새로운 키 추가&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===항목 삭제===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
del person[&amp;quot;city&amp;quot;]           # 특정 키 삭제&lt;br /&gt;
person.pop(&amp;quot;age&amp;quot;)            # 키와 값 제거&lt;br /&gt;
person.clear()               # 전체 삭제&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===반복문 사용===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for key in person:&lt;br /&gt;
    print(key, person[key])&lt;br /&gt;
&lt;br /&gt;
for key, value in person.items():&lt;br /&gt;
    print(key, value)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===딕셔너리 관련 메서드===&lt;br /&gt;
*dict.keys() — 키 목록 반환&lt;br /&gt;
*dict.values() — 값 목록 반환&lt;br /&gt;
*dict.items() — (키, 값) 쌍 반환&lt;br /&gt;
*dict.get(key, default) — 키가 없으면 기본값 반환&lt;br /&gt;
*dict.update(다른딕셔너리) — 병합&lt;br /&gt;
==딕셔너리 컴프리헨션==&lt;br /&gt;
조건이나 변환을 적용하여 딕셔너리를 생성할 수 있다.&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
squares = {x: x**2 for x in range(5)}&lt;br /&gt;
print(squares)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==중첩 딕셔너리==&lt;br /&gt;
딕셔너리 내부에 또 다른 딕셔너리를 포함할 수 있다.&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
users = {&lt;br /&gt;
    &amp;quot;alice&amp;quot;: {&amp;quot;age&amp;quot;: 30, &amp;quot;city&amp;quot;: &amp;quot;Seoul&amp;quot;},&lt;br /&gt;
    &amp;quot;bob&amp;quot;: {&amp;quot;age&amp;quot;: 25, &amp;quot;city&amp;quot;: &amp;quot;Busan&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
print(users[&amp;quot;alice&amp;quot;][&amp;quot;city&amp;quot;])  # Seoul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==같이 보기==&lt;br /&gt;
*[[파이썬 리스트]]&lt;br /&gt;
*[[파이썬 튜플]]&lt;br /&gt;
*[[파이썬 세트]]&lt;br /&gt;
*[[파이썬 자료형]]&lt;br /&gt;
*[[파이썬 컴프리헨션]]&lt;br /&gt;
==참고 문헌==&lt;br /&gt;
*https://docs.python.org/3/library/stdtypes.html#dict&lt;br /&gt;
*Mark Lutz, &#039;&#039;Learning Python&#039;&#039;, O&#039;Reilly Media&lt;br /&gt;
[[분류:파이썬]]&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EA%B0%80%EC%83%81_%ED%99%98%EA%B2%BD&amp;diff=40469</id>
		<title>파이썬 가상 환경</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EA%B0%80%EC%83%81_%ED%99%98%EA%B2%BD&amp;diff=40469"/>
		<updated>2025-03-25T23:42:04Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: 파이썬 가상 환경은 프로젝트별로 독립적인 파이썬 실행 환경을 제공하여, 패키지 버전 충돌이나 의존성 문제를 방지하기 위한 도구이다. ==개요== 파이썬 가상 환경은 시스템 전역에 영향을 주지 않고, 각 프로젝트별로 독립적인 파이썬 인터프리터와 패키지를 관리할 수 있도록 해준다. 이를 통해 서로 다른 프로젝트에서 서로 다른 패키지 버전을 사용하거나, 특...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;파이썬 가상 환경은 프로젝트별로 독립적인 파이썬 실행 환경을 제공하여, 패키지 버전 충돌이나 의존성 문제를 방지하기 위한 도구이다.&lt;br /&gt;
==개요==&lt;br /&gt;
파이썬 가상 환경은 시스템 전역에 영향을 주지 않고, 각 프로젝트별로 독립적인 파이썬 인터프리터와 패키지를 관리할 수 있도록 해준다. 이를 통해 서로 다른 프로젝트에서 서로 다른 패키지 버전을 사용하거나, 특정 프로젝트의 의존성을 격리하여 관리할 수 있다.&lt;br /&gt;
==주요 도구==&lt;br /&gt;
*&#039;&#039;&#039;venv&#039;&#039;&#039;&lt;br /&gt;
**파이썬 3.3부터 표준 라이브러리로 포함되어 있으며, 간단한 명령어로 가상 환경을 생성하고 관리할 수 있다.&lt;br /&gt;
*&#039;&#039;&#039;virtualenv&#039;&#039;&#039;&lt;br /&gt;
**파이썬 2와 다양한 환경에서 사용 가능한 외부 패키지로, venv보다 추가 기능과 유연성을 제공한다.&lt;br /&gt;
*&#039;&#039;&#039;conda 환경&#039;&#039;&#039;&lt;br /&gt;
**Anaconda 배포판에서 제공하는 도구로, 파이썬뿐 아니라 다양한 언어와 패키지를 포함한 환경을 생성하고 관리할 수 있다.&lt;br /&gt;
==생성 및 사용 방법==&lt;br /&gt;
===venv를 이용한 가상 환경 생성===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 가상 환경 생성 (예: myenv 폴더)&lt;br /&gt;
python -m venv myenv&lt;br /&gt;
&lt;br /&gt;
# 가상 환경 활성화 (Unix 계열)&lt;br /&gt;
source myenv/bin/activate&lt;br /&gt;
&lt;br /&gt;
# 가상 환경 활성화 (Windows)&lt;br /&gt;
myenv\Scripts\activate&lt;br /&gt;
&lt;br /&gt;
# 가상 환경 비활성화&lt;br /&gt;
deactivate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===virtualenv를 이용한 가상 환경 생성===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# virtualenv 설치&lt;br /&gt;
pip install virtualenv&lt;br /&gt;
&lt;br /&gt;
# 가상 환경 생성 (예: myenv 폴더)&lt;br /&gt;
virtualenv myenv&lt;br /&gt;
&lt;br /&gt;
# 가상 환경 활성화 (Unix 계열)&lt;br /&gt;
source myenv/bin/activate&lt;br /&gt;
&lt;br /&gt;
# 가상 환경 활성화 (Windows)&lt;br /&gt;
myenv\Scripts\activate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===conda 환경 생성===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 새로운 conda 환경 생성 (예: myenv)&lt;br /&gt;
conda create --name myenv python=3.9&lt;br /&gt;
&lt;br /&gt;
# 환경 활성화&lt;br /&gt;
conda activate myenv&lt;br /&gt;
&lt;br /&gt;
# 환경 비활성화&lt;br /&gt;
conda deactivate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==장점==&lt;br /&gt;
*프로젝트 간 의존성 충돌 방지 및 시스템 전역 환경 오염 최소화&lt;br /&gt;
*특정 프로젝트에 필요한 패키지와 파이썬 버전을 독립적으로 관리할 수 있음&lt;br /&gt;
*협업 시 일관된 개발 환경 제공 및 배포 테스트 용이&lt;br /&gt;
==활용==&lt;br /&gt;
파이썬 가상 환경은 복수의 프로젝트를 동시에 진행하거나, 특정 프로젝트의 요구 사항을 재현하여 디버깅 및 배포 테스트를 수행할 때 유용하다. 또한, 여러 파이썬 버전을 동시에 관리할 수 있어 최신 버전과 이전 버전의 호환성을 점검할 때도 사용된다.&lt;br /&gt;
==같이 보기==&lt;br /&gt;
*[[패키지 관리 (파이썬)]]&lt;br /&gt;
*[[pip]]&lt;br /&gt;
*[[Conda]]&lt;br /&gt;
*[[Docker]]&lt;br /&gt;
*[[환경 변수]]&lt;br /&gt;
==참고 문헌==&lt;br /&gt;
*Python 공식 문서, &amp;quot;venv — Creation of virtual environments&amp;quot;, https://docs.python.org/3/library/venv.html&lt;br /&gt;
*virtualenv 공식 문서, https://virtualenv.pypa.io&lt;br /&gt;
*Conda 공식 문서, https://docs.conda.io&lt;br /&gt;
[[분류:파이썬]]&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%ED%94%8C%EB%9D%BC%EC%8A%A4%ED%81%AC_(Flask)&amp;diff=40468</id>
		<title>플라스크 (Flask)</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%ED%94%8C%EB%9D%BC%EC%8A%A4%ED%81%AC_(Flask)&amp;diff=40468"/>
		<updated>2025-03-25T23:40:29Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: 플라스크(Flask)는 파이썬으로 작성된 경량 웹 프레임워크로, 심플한 구조와 확장성이 뛰어나 소규모 웹 애플리케이션부터 프로토타입 개발에 널리 사용된다. ==개요== 플라스크는 Werkzeug와 Jinja2를 기반으로 개발되었으며, 기본적으로 최소한의 기능만 제공한다. 필요에 따라 다양한 확장 모듈을 추가하여 데이터베이스 연동, 폼 검증, 인증, 파일 업로드 등 여러 기능...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;플라스크(Flask)는 파이썬으로 작성된 경량 웹 프레임워크로, 심플한 구조와 확장성이 뛰어나 소규모 웹 애플리케이션부터 프로토타입 개발에 널리 사용된다.&lt;br /&gt;
==개요==&lt;br /&gt;
플라스크는 Werkzeug와 Jinja2를 기반으로 개발되었으며, 기본적으로 최소한의 기능만 제공한다. 필요에 따라 다양한 확장 모듈을 추가하여 데이터베이스 연동, 폼 검증, 인증, 파일 업로드 등 여러 기능을 쉽게 구현할 수 있다.&lt;br /&gt;
==특징==&lt;br /&gt;
*단순하고 유연한 설계로 빠른 프로토타이핑에 적합하다.&lt;br /&gt;
*내장 개발 서버와 디버거를 제공하여 개발 과정에서 빠른 테스트와 디버깅이 가능하다.&lt;br /&gt;
*RESTful 요청 처리를 쉽게 구성할 수 있으며, 라우팅 기능이 직관적이다.&lt;br /&gt;
*다양한 확장 모듈(Flask-SQLAlchemy, Flask-WTF, Flask-Login 등)을 통해 기능 확장이 용이하다.&lt;br /&gt;
*Jinja2 템플릿 엔진을 사용하여 HTML 템플릿 렌더링을 지원한다.&lt;br /&gt;
==내장 서버와 프로덕션 배포==&lt;br /&gt;
플라스크가 제공하는 내장 웹 서버는 개발과 디버깅을 위한 용도로 설계되어 있다. 이 서버는 경량화되어 있어 간단한 테스트와 로컬 개발 환경에서는 유용하지만, 보안과 성능 면에서 제한이 있어 실제 운영 환경에서는 적합하지 않다. 프로덕션 환경에서는 Gunicorn, uWSGI, 또는 Waitress와 같은 별도의 WSGI 서버를 사용하여 더 높은 안정성과 확장성을 확보하는 것이 바람직하다.&lt;br /&gt;
==설치==&lt;br /&gt;
플라스크는 pip를 사용하여 쉽게 설치할 수 있다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install Flask&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==기본 예제==&lt;br /&gt;
다음은 플라스크를 이용하여 간단한 웹 애플리케이션을 구현한 예제이다.&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask, request, jsonify&lt;br /&gt;
&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def index():&lt;br /&gt;
    return &amp;quot;Hello, Flask!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/greet/&amp;lt;name&amp;gt;&amp;quot;)&lt;br /&gt;
def greet(name):&lt;br /&gt;
    return f&amp;quot;Hello, {name}!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/data&amp;quot;, methods=[&amp;quot;POST&amp;quot;])&lt;br /&gt;
def data():&lt;br /&gt;
    json_data = request.get_json()&lt;br /&gt;
    return jsonify({&amp;quot;received&amp;quot;: json_data})&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    app.run(debug=True)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;위 예제에서는 기본 경로, 동적 URL 경로, POST 요청을 처리하는 API 엔드포인트를 구현하였다. 디버깅 모드에서는 내장 서버를 통해 빠른 테스트가 가능하다.&lt;br /&gt;
==프로덕션 배포==&lt;br /&gt;
개발 중에 제공되는 내장 서버는 보안, 동시 접속 처리, 성능 등의 이유로 프로덕션 환경에서는 사용되지 않는다. 실제 운영 환경에서는 다음과 같은 WSGI 서버를 사용하여 애플리케이션을 배포하는 것이 좋다.&lt;br /&gt;
*Gunicorn: 멀티 워커 프로세스를 통해 동시 요청을 효율적으로 처리한다.&lt;br /&gt;
*uWSGI: 높은 안정성과 다양한 기능을 제공하며, Nginx와 함께 사용하면 정적 파일 처리에도 유리하다.&lt;br /&gt;
*Waitress: Windows 환경에서도 안정적으로 운영 가능한 WSGI 서버이다.&lt;br /&gt;
예를 들어, Gunicorn과 함께 플라스크 애플리케이션을 배포하는 방법은 다음과 같다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gunicorn main:app --workers 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;여기서 &amp;quot;main&amp;quot;은 애플리케이션 파일명을, &amp;quot;app&amp;quot;은 Flask 인스턴스 객체를 의미하며, --workers 옵션을 통해 여러 프로세스로 요청을 분산시킬 수 있다.&lt;br /&gt;
==같이 보기==&lt;br /&gt;
*[[FastAPI]]&lt;br /&gt;
*[[Django]]&lt;br /&gt;
*[[WSGI]]&lt;br /&gt;
*[[Jinja2]]&lt;br /&gt;
*[[Werkzeug]]&lt;br /&gt;
==참고 문헌==&lt;br /&gt;
*https://flask.palletsprojects.com&lt;br /&gt;
*Armin Ronacher, Flask 공식 문서&lt;br /&gt;
[[분류:파이썬]]&lt;br /&gt;
[[분류:프로그래밍]]&lt;br /&gt;
[[분류:백엔드]]&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EC%9C%A0%EB%B9%84%EC%BD%98_(Uvicorn)&amp;diff=40467</id>
		<title>유비콘 (Uvicorn)</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%9C%A0%EB%B9%84%EC%BD%98_(Uvicorn)&amp;diff=40467"/>
		<updated>2025-03-25T23:25:22Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: Uvicorn은 ASGI(Asynchronous Server Gateway Interface) 애플리케이션을 실행하기 위한 고성능 비동기 웹 서버이다. FastAPI, Starlette, Django(ASGI 지원 시) 등 현대적인 웹 프레임워크와 함께 사용되며, 단순 코드 예제 이상의 역할을 수행한다. Uvicorn은 전체 ASGI 생태계 내에서 중요한 위치를 차지하며, 개발 및 프로덕션 환경 모두에서 핵심 역할을 담당한다. ==개요== Uvicorn은 Python의 asyn...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Uvicorn은 ASGI(Asynchronous Server Gateway Interface) 애플리케이션을 실행하기 위한 고성능 비동기 웹 서버이다. FastAPI, Starlette, Django(ASGI 지원 시) 등 현대적인 웹 프레임워크와 함께 사용되며, 단순 코드 예제 이상의 역할을 수행한다. Uvicorn은 전체 ASGI 생태계 내에서 중요한 위치를 차지하며, 개발 및 프로덕션 환경 모두에서 핵심 역할을 담당한다.&lt;br /&gt;
==개요==&lt;br /&gt;
Uvicorn은 Python의 asyncio를 기반으로 uvloop, httptools 등 네이티브 라이브러리와 결합되어 높은 처리 성능과 낮은 지연시간을 제공한다. 기본적으로 HTTP 1.1을 지원하며, 옵션에 따라 HTTP/2와 WebSocket도 지원할 수 있다. 개발 환경에서는 자동 재시작(--reload)을 통해 빠른 피드백을 제공하고, 프로덕션 환경에서는 멀티 워커 옵션(--workers)을 통해 확장성을 확보할 수 있다.&lt;br /&gt;
==역할 및 특징==&lt;br /&gt;
Uvicorn은 ASGI 표준을 구현하여 웹 요청을 비동기적으로 처리한다. FastAPI와 같은 프레임워크와 함께 사용할 때, Uvicorn은 클라이언트의 HTTP 및 WebSocket 요청을 받아 ASGI 애플리케이션으로 전달하고, 그 응답을 다시 클라이언트에 전달하는 중개자 역할을 한다.&lt;br /&gt;
*비동기 처리를 통한 높은 성능 제공&lt;br /&gt;
*uvloop와 httptools 등 네이티브 라이브러리 기반으로 빠른 실행 속도 보장&lt;br /&gt;
*간단한 CLI 명령어로 서버 실행 및 옵션 설정 가능&lt;br /&gt;
*개발 중 코드 변경 시 자동 재시작(--reload) 옵션 제공&lt;br /&gt;
*프로덕션 환경에서는 멀티 워커(--workers) 옵션을 통해 부하 분산 가능&lt;br /&gt;
==ASGI 서버 비교==&lt;br /&gt;
Uvicorn은 다른 ASGI 서버와 비교했을 때 다음과 같은 차별점을 가진다.&lt;br /&gt;
*Daphne: Django Channels에서 주로 사용되는 서버로 웹소켓 지원에 강점을 보이나, Uvicorn은 전반적인 성능과 응답 속도에서 더 뛰어나다.&lt;br /&gt;
*Hypercorn: Quart와 같은 프레임워크에서 주로 사용되며 다양한 프로토콜 지원에 중점을 두지만, Uvicorn은 단순성과 경량성에서 우위를 점한다.&lt;br /&gt;
*Uvicorn은 특히 FastAPI와 같은 최신 웹 프레임워크와의 결합 시, API 응답 속도와 확장성에서 많은 개발자들이 선호하는 선택이다.&lt;br /&gt;
==FastAPI와 함께 사용될 때의 역할==&lt;br /&gt;
FastAPI와 결합될 경우, Uvicorn은 다음과 같은 역할을 수행한다.&lt;br /&gt;
#ASGI 서버로서 FastAPI 애플리케이션을 실행하고, 클라이언트 요청을 비동기적으로 처리한다.&lt;br /&gt;
#FastAPI에서 정의한 경로, 요청 바디, 응답 모델 등의 기능을 원활하게 전달받아 적절히 실행하도록 돕는다.&lt;br /&gt;
#개발 중 자동 재시작(--reload) 옵션을 통해 코드 수정 시 즉각적으로 반영되어 개발 생산성을 높인다.&lt;br /&gt;
#프로덕션 환경에서는 멀티 프로세스 설정(--workers)을 통해 고부하 상황에서도 안정적인 서비스 제공을 가능하게 한다.&lt;br /&gt;
==기본 실행 예제==&lt;br /&gt;
다음은 FastAPI 애플리케이션과 함께 Uvicorn을 사용하는 기본 예제이다.&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from fastapi import FastAPI&lt;br /&gt;
&lt;br /&gt;
app = FastAPI()&lt;br /&gt;
&lt;br /&gt;
@app.get(&amp;quot;/&amp;quot;)&lt;br /&gt;
async def root():&lt;br /&gt;
    return {&amp;quot;message&amp;quot;: &amp;quot;Hello, Uvicorn and FastAPI!&amp;quot;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;서버 실행 명령:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uvicorn main:app --reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;여기서 &amp;quot;main&amp;quot;은 파일명, &amp;quot;app&amp;quot;은 FastAPI 인스턴스를 의미하며, --reload 옵션은 개발 중 코드 변경 시 자동으로 서버를 재시작한다.&lt;br /&gt;
==고급 사용 예제==&lt;br /&gt;
Uvicorn은 다양한 옵션을 통해 프로덕션 환경에 적합하게 설정할 수 있다. 예를 들어, 멀티 워커 환경에서 실행하는 경우:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uvicorn main:app --workers 4 --host 0.0.0.0 --port 8000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;또한, gunicorn과 함께 Uvicorn 워커를 사용하여 더욱 안정적인 서비스 구성이 가능하다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gunicorn main:app -k uvicorn.workers.UvicornWorker --workers 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==요약==&lt;br /&gt;
Uvicorn은 ASGI 애플리케이스 서버로서, 비동기 처리를 통한 높은 성능과 간편한 사용법을 제공한다. FastAPI와 결합될 때 Uvicorn은 애플리케이션의 실행 환경을 담당하며, 빠른 응답성과 확장성을 보장하는 핵심 요소로 작용한다. 다양한 ASGI 서버와 비교하여 단순성, 경량성, 그리고 뛰어난 성능 면에서 많은 개발자들이 선호하는 선택이다.&lt;br /&gt;
==같이 보기==&lt;br /&gt;
*[[ASGI]]&lt;br /&gt;
*[[FastAPI]]&lt;br /&gt;
*[[Starlette]]&lt;br /&gt;
*[[Django]]&lt;br /&gt;
*[[Hypercorn]]&lt;br /&gt;
*[[Daphne]]&lt;br /&gt;
*[[비동기 프로그래밍 (파이썬)]]&lt;br /&gt;
==참고 문헌==&lt;br /&gt;
*https://www.uvicorn.org&lt;br /&gt;
*https://github.com/encode/uvicorn&lt;br /&gt;
*FastAPI 공식 문서: https://fastapi.tiangolo.com&lt;br /&gt;
[[분류:파이썬]]&lt;br /&gt;
[[분류:프로그래밍]]&lt;br /&gt;
[[분류:백엔드]]&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%B9%84%EB%8F%99%EA%B8%B0_%EC%84%9C%EB%B2%84_%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4&amp;diff=40466</id>
		<title>비동기 서버 게이트웨이 인터페이스</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%B9%84%EB%8F%99%EA%B8%B0_%EC%84%9C%EB%B2%84_%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4&amp;diff=40466"/>
		<updated>2025-03-25T23:17:43Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: ASGI(비동기 서버 게이트웨이 인터페이스, &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;synchronous &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039;erver &amp;#039;&amp;#039;&amp;#039;G&amp;#039;&amp;#039;&amp;#039;ateway &amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;nterface)는 Python 웹 프레임워크와 서버 간의 비동기 통신을 가능하게 해주는 표준 인터페이스로, 기존 WSGI(Web Server Gateway Interface)의 한계를 극복하고 웹소켓, HTTP/2 등 비동기 기능을 지원하기 위해 설계되었다. ==개요== ASGI는 Django, FastAPI, Starlette 같은 현대적인 Python 웹 프레임워크가 고...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ASGI(비동기 서버 게이트웨이 인터페이스, &#039;&#039;&#039;A&#039;&#039;&#039;synchronous &#039;&#039;&#039;S&#039;&#039;&#039;erver &#039;&#039;&#039;G&#039;&#039;&#039;ateway &#039;&#039;&#039;I&#039;&#039;&#039;nterface)는 Python 웹 프레임워크와 서버 간의 비동기 통신을 가능하게 해주는 표준 인터페이스로, 기존 WSGI(Web Server Gateway Interface)의 한계를 극복하고 웹소켓, HTTP/2 등 비동기 기능을 지원하기 위해 설계되었다.&lt;br /&gt;
==개요==&lt;br /&gt;
ASGI는 Django, FastAPI, Starlette 같은 현대적인 Python 웹 프레임워크가 고성능 네트워크 프로그래밍과 실시간 웹 기능(예: 웹소켓)을 지원할 수 있도록 해준다. 비동기 함수(async def)와 함께 사용할 수 있으며, 멀티프로토콜 처리 구조를 가지고 있다.&lt;br /&gt;
==역사==&lt;br /&gt;
*WSGI는 Python 웹 표준으로 널리 사용되었으나, 동기 방식만 지원&lt;br /&gt;
*ASGI는 2016년 Django Channels 프로젝트의 일환으로 등장&lt;br /&gt;
*현재는 Django, FastAPI, Starlette, Quart 등에서 사용되고 있음&lt;br /&gt;
==특징==&lt;br /&gt;
*&#039;&#039;&#039;비동기/동기 모두 지원&#039;&#039;&#039; — async/await 기반의 처리를 기본으로 하고, 기존 WSGI 앱과의 호환성도 제공&lt;br /&gt;
*&#039;&#039;&#039;웹소켓 지원&#039;&#039;&#039; — 실시간 채팅, 스트리밍 등에 적합&lt;br /&gt;
*&#039;&#039;&#039;멀티 프로토콜&#039;&#039;&#039; — HTTP, HTTP/2, WebSocket 등 다양한 프로토콜 처리 가능&lt;br /&gt;
*&#039;&#039;&#039;스코프(Scope) 구조&#039;&#039;&#039; — 요청, 연결 등에 대한 정보를 딕셔너리 형태로 전달&lt;br /&gt;
*&#039;&#039;&#039;이벤트 기반 구조&#039;&#039;&#039; — 요청 처리 흐름이 event loop를 기반으로 비동기 실행됨&lt;br /&gt;
==구조==&lt;br /&gt;
ASGI 애플리케이션은 다음과 같은 구조를 가진다.&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
async def app(scope, receive, send):&lt;br /&gt;
    assert scope[&amp;quot;type&amp;quot;] == &amp;quot;http&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    await receive()  # 요청 수신&lt;br /&gt;
    await send({     # 응답 전송&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;http.response.start&amp;quot;,&lt;br /&gt;
        &amp;quot;status&amp;quot;: 200,&lt;br /&gt;
        &amp;quot;headers&amp;quot;: [[b&amp;quot;content-type&amp;quot;, b&amp;quot;text/plain&amp;quot;]],&lt;br /&gt;
    })&lt;br /&gt;
    await send({&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;http.response.body&amp;quot;,&lt;br /&gt;
        &amp;quot;body&amp;quot;: b&amp;quot;Hello, ASGI!&amp;quot;,&lt;br /&gt;
    })&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==사용 예시==&lt;br /&gt;
ASGI 앱은 일반적으로 Uvicorn, Daphne, Hypercorn 같은 ASGI 서버를 통해 실행된다.&lt;br /&gt;
===FastAPI 예제 실행===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uvicorn main:app --reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Django ASGI 설정 (asgi.py)===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
from django.core.asgi import get_asgi_application&lt;br /&gt;
&lt;br /&gt;
os.environ.setdefault(&#039;DJANGO_SETTINGS_MODULE&#039;, &#039;myproject.settings&#039;)&lt;br /&gt;
application = get_asgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==주요 ASGI 서버==&lt;br /&gt;
*&#039;&#039;&#039;Uvicorn&#039;&#039;&#039; — 빠르고 가벼운 ASGI 서버, FastAPI와 자주 사용됨&lt;br /&gt;
*&#039;&#039;&#039;Daphne&#039;&#039;&#039; — Django Channels용으로 개발된 ASGI 서버&lt;br /&gt;
*&#039;&#039;&#039;Hypercorn&#039;&#039;&#039; — Quart 프레임워크에서 주로 사용됨&lt;br /&gt;
==같이 보기==&lt;br /&gt;
*[[WSGI]]&lt;br /&gt;
*[[FastAPI]]&lt;br /&gt;
*[[Starlette]]&lt;br /&gt;
*[[Uvicorn]]&lt;br /&gt;
*[[Django]]&lt;br /&gt;
*[[비동기 프로그래밍 (파이썬)]]&lt;br /&gt;
==참고 문헌==&lt;br /&gt;
*https://asgi.readthedocs.io&lt;br /&gt;
*https://www.python.org/dev/peps/pep-3333/ (WSGI)&lt;br /&gt;
*https://www.python.org/dev/peps/pep-484/ (Type Hints)&lt;br /&gt;
*Django Channels, &#039;&#039;ASGI Introduction&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC_unstructured&amp;diff=40464</id>
		<title>파이썬 라이브러리 unstructured</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC_unstructured&amp;diff=40464"/>
		<updated>2025-03-25T05:30:37Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: unstructured는 다양한 형식의 비정형 문서(PDF, DOCX, HTML, 이메일 등)에서 텍스트 데이터를 추출하고 구조화하는 데 사용되는 파이썬 오픈소스 라이브러리이다. 특히 RAG(Retrieval-Augmented Generation) 시스템 구축 시 문서 전처리 단계에서 유용하게 사용된다. ==개요== unstructured는 문서 파일에서 텍스트를 블록 단위로 추출하며, 각 블록에는 텍스트 외에도 메타데이터(페이지...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;unstructured는 다양한 형식의 비정형 문서(PDF, DOCX, HTML, 이메일 등)에서 텍스트 데이터를 추출하고 구조화하는 데 사용되는 파이썬 오픈소스 라이브러리이다. 특히 RAG(Retrieval-Augmented Generation) 시스템 구축 시 문서 전처리 단계에서 유용하게 사용된다.&lt;br /&gt;
==개요==&lt;br /&gt;
unstructured는 문서 파일에서 텍스트를 블록 단위로 추출하며, 각 블록에는 텍스트 외에도 메타데이터(페이지 번호, 좌표, 헤더 여부 등)가 포함된다. 이를 통해 추출된 데이터를 벡터화하거나 질문 응답 시스템의 입력으로 활용할 수 있다.&lt;br /&gt;
==주요 특징==&lt;br /&gt;
*&#039;&#039;&#039;다양한 포맷 지원&#039;&#039;&#039;&lt;br /&gt;
**PDF, DOCX, PPTX, HTML, EML, MSG, TXT 등 광범위한 문서 형식 처리&lt;br /&gt;
*&#039;&#039;&#039;텍스트 블록 추출&#039;&#039;&#039;&lt;br /&gt;
**문서 내 문단, 표, 제목, 이미지 캡션 등을 구분하여 추출&lt;br /&gt;
*&#039;&#039;&#039;구조화된 출력&#039;&#039;&#039;&lt;br /&gt;
**텍스트와 함께 메타데이터(JSON-like 형태)를 포함한 구조적 정보 제공&lt;br /&gt;
*&#039;&#039;&#039;클래스 기반 파이프라인&#039;&#039;&#039;&lt;br /&gt;
**Element 객체를 중심으로 처리 단계를 유연하게 구성 가능&lt;br /&gt;
*&#039;&#039;&#039;LangChain 및 LlamaIndex와 호환&#039;&#039;&#039;&lt;br /&gt;
==설치==&lt;br /&gt;
기본 설치:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install unstructured&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;PDF 등 특정 포맷 처리를 위한 추가 의존성 설치:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install &amp;quot;unstructured[pdf,pptx,docx,html]&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==예제 코드==&lt;br /&gt;
PDF 파일에서 텍스트 블록 추출 예제:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from unstructured.partition.pdf import partition_pdf&lt;br /&gt;
&lt;br /&gt;
elements = partition_pdf(filename=&amp;quot;example.pdf&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
for el in elements:&lt;br /&gt;
    print(&amp;quot;타입:&amp;quot;, el.category)&lt;br /&gt;
    print(&amp;quot;텍스트:&amp;quot;, el.text)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;텍스트 파일 처리 예제:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from unstructured.partition.text import partition_text&lt;br /&gt;
&lt;br /&gt;
elements = partition_text(filename=&amp;quot;example.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
for el in elements:&lt;br /&gt;
    print(el.to_dict())  # 구조화된 블록 출력&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==주요 클래스==&lt;br /&gt;
*&#039;&#039;&#039;Element&#039;&#039;&#039; — 추출된 텍스트 블록의 기본 객체&lt;br /&gt;
*&#039;&#039;&#039;partition_pdf / partition_docx / partition_html&#039;&#039;&#039; — 문서 형식별 파서 함수&lt;br /&gt;
*&#039;&#039;&#039;Chunking 기능&#039;&#039;&#039; — 길이가 긴 텍스트를 블록 단위로 나누는 기능도 지원&lt;br /&gt;
==활용==&lt;br /&gt;
*[[RAG]] 파이프라인에서 문서 임베딩 전 사전 처리&lt;br /&gt;
*이메일, 보고서, 계약서 등에서 구조화된 데이터 추출&lt;br /&gt;
*문서 분류, 요약, 검색 시스템의 전처리 단계&lt;br /&gt;
*기업 내부 문서 자동 인덱싱 및 질의응답 시스템&lt;br /&gt;
==같이 보기==&lt;br /&gt;
*[[랭체인]]&lt;br /&gt;
*[[LlamaIndex]]&lt;br /&gt;
*[[pdfplumber]]&lt;br /&gt;
*[[PyMuPDF]]&lt;br /&gt;
*[[BeautifulSoup]]&lt;br /&gt;
*[[RAG]]&lt;br /&gt;
==참고 문헌==&lt;br /&gt;
*https://github.com/Unstructured-IO/unstructured&lt;br /&gt;
*https://www.unstructured.io&lt;br /&gt;
*Unstructured Documentation, Unstructured.io&lt;br /&gt;
[[분류:파이썬]]&lt;br /&gt;
[[분류:프로그래밍]]&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8A%A4_(FAISS)&amp;diff=40463</id>
		<title>파이스 (FAISS)</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8A%A4_(FAISS)&amp;diff=40463"/>
		<updated>2025-03-25T05:10:42Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: 파이스(FAISS, Facebook AI Similarity Search)는 벡터 유사도 검색(Nearest Neighbor Search)을 빠르고 효율적으로 수행할 수 있게 해주는 Facebook AI Research가 개발한 오픈소스 라이브러리이다. 고차원 벡터 공간에서 대규모 데이터의 검색과 클러스터링에 최적화되어 있으며, 자연어 처리, 추천 시스템, 검색 기반 생성(RAG) 등 다양한 분야에서 활용된다. ==개요== FAISS는 GPU 및 CPU 모두에...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;파이스(FAISS, Facebook AI Similarity Search)는 벡터 유사도 검색(Nearest Neighbor Search)을 빠르고 효율적으로 수행할 수 있게 해주는 Facebook AI Research가 개발한 오픈소스 라이브러리이다. 고차원 벡터 공간에서 대규모 데이터의 검색과 클러스터링에 최적화되어 있으며, 자연어 처리, 추천 시스템, 검색 기반 생성(RAG) 등 다양한 분야에서 활용된다.&lt;br /&gt;
==개요==&lt;br /&gt;
FAISS는 GPU 및 CPU 모두에서 동작하며, 수백만 개 이상의 벡터에 대해 빠른 근접 이웃 검색을 가능하게 한다. 일반적인 유클리드 거리뿐만 아니라 코사인 유사도, 내적 등 다양한 거리 함수 기반으로 유사한 벡터를 찾아준다.&lt;br /&gt;
==특징==&lt;br /&gt;
*&#039;&#039;&#039;빠른 최근접 이웃 검색(ANN)&#039;&#039;&#039;&lt;br /&gt;
**고차원 벡터 공간에서 유사한 벡터를 빠르게 찾을 수 있음&lt;br /&gt;
*&#039;&#039;&#039;다양한 인덱스 구조 제공&#039;&#039;&#039;&lt;br /&gt;
**Flat, IVF, HNSW, PQ 등 다양한 알고리즘 선택 가능&lt;br /&gt;
*&#039;&#039;&#039;GPU 지원&#039;&#039;&#039;&lt;br /&gt;
**대규모 벡터 데이터셋에 대해 CUDA 기반 병렬 검색 가능&lt;br /&gt;
*&#039;&#039;&#039;Python과 C++ API 제공&#039;&#039;&#039;&lt;br /&gt;
**파이썬 환경에서 사용이 간편하며 C++로 고성능 처리도 가능&lt;br /&gt;
*&#039;&#039;&#039;벡터 삽입/삭제/병합&#039;&#039;&#039;&lt;br /&gt;
**유동적인 인덱스 업데이트 기능 제공&lt;br /&gt;
==설치==&lt;br /&gt;
CPU 전용 버전:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install faiss-cpu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;GPU 지원 버전:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install faiss-gpu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==기본 사용 예제==&lt;br /&gt;
다음은 FAISS를 이용하여 간단한 벡터 검색을 수행하는 예제이다.&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import faiss&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# 128차원 벡터 1000개 생성&lt;br /&gt;
d = 128&lt;br /&gt;
nb = 1000&lt;br /&gt;
query = 5&lt;br /&gt;
&lt;br /&gt;
np.random.seed(0)&lt;br /&gt;
xb = np.random.random((nb, d)).astype(&#039;float32&#039;)&lt;br /&gt;
xq = np.random.random((query, d)).astype(&#039;float32&#039;)&lt;br /&gt;
&lt;br /&gt;
# 인덱스 생성 (L2 거리 기반)&lt;br /&gt;
index = faiss.IndexFlatL2(d)&lt;br /&gt;
index.add(xb)  # 벡터 추가&lt;br /&gt;
&lt;br /&gt;
# 검색 (query 벡터 기준으로 3개씩 가장 가까운 벡터 찾기)&lt;br /&gt;
D, I = index.search(xq, 3)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;거리(D):&amp;quot;, D)&lt;br /&gt;
print(&amp;quot;인덱스(I):&amp;quot;, I)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==주요 인덱스 종류==&lt;br /&gt;
*&#039;&#039;&#039;IndexFlatL2&#039;&#039;&#039; — 가장 단순하고 정확한 인덱스 (모든 벡터를 직접 비교)&lt;br /&gt;
*&#039;&#039;&#039;IndexIVFFlat&#039;&#039;&#039; — IVF(역 파일) 구조로 빠른 근접 탐색&lt;br /&gt;
*&#039;&#039;&#039;IndexHNSW&#039;&#039;&#039; — HNSW 알고리즘 기반 그래프 구조 사용&lt;br /&gt;
*&#039;&#039;&#039;IndexPQ&#039;&#039;&#039; — 제품 양자화(Product Quantization)로 메모리 사용량 절감&lt;br /&gt;
*&#039;&#039;&#039;IndexIDMap&#039;&#039;&#039; — ID와 함께 벡터를 저장해 외부 참조 가능&lt;br /&gt;
==활용==&lt;br /&gt;
*[[RAG]] 시스템에서 문서 임베딩 검색&lt;br /&gt;
*이미지 검색 및 유사 이미지 추천&lt;br /&gt;
*텍스트 유사도 기반 검색 (문장 임베딩 기반)&lt;br /&gt;
*사용자 행동 벡터 기반 추천 시스템&lt;br /&gt;
*클러스터링 및 군집 분석&lt;br /&gt;
==같이 보기==&lt;br /&gt;
*[[랭체인]]&lt;br /&gt;
*[[Chroma]]&lt;br /&gt;
*[[Annoy]]&lt;br /&gt;
*[[HNSW]]&lt;br /&gt;
*[[RAG]]&lt;br /&gt;
*[[임베딩]]&lt;br /&gt;
==참고 문헌==&lt;br /&gt;
*https://github.com/facebookresearch/faiss&lt;br /&gt;
*Johnson, J., Douze, M., &amp;amp; Jégou, H. (2017). &#039;&#039;Billion-scale similarity search with GPUs&#039;&#039;. IEEE Transactions on Big Data.&lt;br /&gt;
*https://faiss.ai&lt;br /&gt;
[[분류:인공지능]]&lt;br /&gt;
[[분류:프로그래밍]]&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%9E%AD%EC%B2%B4%EC%9D%B8&amp;diff=40462</id>
		<title>랭체인</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%9E%AD%EC%B2%B4%EC%9D%B8&amp;diff=40462"/>
		<updated>2025-03-25T05:09:51Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: 랭체인(LangChain)은 언어 모델(LLM)을 중심으로 다양한 외부 데이터, 도구, 환경과 연결하여 고급 애플리케이션을 구성할 수 있도록 도와주는 파이썬 기반 오픈소스 프레임워크이다. ==개요== 기본적인 프롬프트-응답 방식에서 벗어나, 랭체인은 &amp;#039;&amp;#039;&amp;#039;기억(Memory)&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;체인(Chain)&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;도구(Tool)&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;에이전트(Agent)&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;검색 기반 질의(RAG)&amp;#039;&amp;#039;&amp;#039; 등 고급 기능을 통해 LLM을 유연...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;랭체인(LangChain)은 언어 모델(LLM)을 중심으로 다양한 외부 데이터, 도구, 환경과 연결하여 고급 애플리케이션을 구성할 수 있도록 도와주는 파이썬 기반 오픈소스 프레임워크이다.&lt;br /&gt;
==개요==&lt;br /&gt;
기본적인 프롬프트-응답 방식에서 벗어나, 랭체인은 &#039;&#039;&#039;기억(Memory)&#039;&#039;&#039;, &#039;&#039;&#039;체인(Chain)&#039;&#039;&#039;, &#039;&#039;&#039;도구(Tool)&#039;&#039;&#039;, &#039;&#039;&#039;에이전트(Agent)&#039;&#039;&#039;, &#039;&#039;&#039;검색 기반 질의(RAG)&#039;&#039;&#039; 등 고급 기능을 통해 LLM을 유연하고 실용적인 시스템으로 구성할 수 있게 한다.&lt;br /&gt;
&lt;br /&gt;
2023년 이후로 급속히 인기를 얻으며, 챗봇, 문서 요약, 질의응답 시스템, 데이터 분석 도우미, 자동화 에이전트 등에 널리 사용되고 있다.&lt;br /&gt;
==주요 구성 요소==&lt;br /&gt;
*&#039;&#039;&#039;프롬프트 템플릿(PromptTemplate)&#039;&#039;&#039;&lt;br /&gt;
**입력값에 따라 동적으로 프롬프트를 생성하는 기능&lt;br /&gt;
*&#039;&#039;&#039;LLM 인터페이스&#039;&#039;&#039;&lt;br /&gt;
**OpenAI, Anthropic, HuggingFace 등 다양한 LLM API를 연결&lt;br /&gt;
*&#039;&#039;&#039;체인(Chain)&#039;&#039;&#039;&lt;br /&gt;
**여러 개의 LLM 호출 또는 작업 단계를 연결하여 복합적인 처리 흐름 구성&lt;br /&gt;
*&#039;&#039;&#039;메모리(Memory)&#039;&#039;&#039;&lt;br /&gt;
**이전 대화 또는 상태 정보를 기억하여 대화형 시스템 구현 가능&lt;br /&gt;
*&#039;&#039;&#039;도구(Tool) 및 에이전트(Agent)&#039;&#039;&#039;&lt;br /&gt;
**계산기, 검색 API, 외부 문서 등 다양한 도구를 활용해 문제 해결을 수행하는 LLM 기반 에이전트 구성&lt;br /&gt;
*&#039;&#039;&#039;문서 로딩 및 RAG&#039;&#039;&#039;&lt;br /&gt;
**PDF, 웹페이지, Notion, DB 등에서 문서를 불러와 벡터화 후 질의응답 수행 (Retrieval-Augmented Generation)&lt;br /&gt;
==설치==&lt;br /&gt;
pip 명령어를 사용하여 설치할 수 있다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install langchain&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;OpenAI와 함께 사용하는 경우:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install openai&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==예제==&lt;br /&gt;
간단한 OpenAI GPT 모델을 사용하는 체인 예제:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from langchain.llms import OpenAI&lt;br /&gt;
from langchain.prompts import PromptTemplate&lt;br /&gt;
from langchain.chains import LLMChain&lt;br /&gt;
&lt;br /&gt;
llm = OpenAI(temperature=0.7)&lt;br /&gt;
&lt;br /&gt;
prompt = PromptTemplate(&lt;br /&gt;
    input_variables=[&amp;quot;product&amp;quot;],&lt;br /&gt;
    template=&amp;quot;Write a short advertisement for the following product: {product}&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
chain = LLMChain(llm=llm, prompt=prompt)&lt;br /&gt;
response = chain.run(&amp;quot;noise-cancelling headphones&amp;quot;)&lt;br /&gt;
print(response)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==주요 활용 사례==&lt;br /&gt;
*&#039;&#039;&#039;챗봇&#039;&#039;&#039; - 맥락을 유지하는 대화형 에이전트 구축&lt;br /&gt;
*&#039;&#039;&#039;문서 질의응답(RAG)&#039;&#039;&#039; - 벡터 DB와 결합하여 사내 문서, 논문, 리포트 기반 질문 처리&lt;br /&gt;
*&#039;&#039;&#039;자동화 에이전트&#039;&#039;&#039; - 계산기, 웹 검색, 일정 관리 등 다양한 도구와 결합&lt;br /&gt;
*&#039;&#039;&#039;데이터 요약 및 분석&#039;&#039;&#039; - CSV, SQL, 웹 페이지 등에서 요약 및 해석&lt;br /&gt;
==관련 생태계==&lt;br /&gt;
*[[FAISS]] / [[Chroma]] — 벡터 데이터베이스&lt;br /&gt;
*[[OpenAI]] — GPT 기반 모델 제공&lt;br /&gt;
*[[LangSmith]] — 디버깅 및 로그 추적 도구&lt;br /&gt;
*[[LlamaIndex]] — 문서 구조화 및 검색 보조 라이브러리&lt;br /&gt;
==같이 보기==&lt;br /&gt;
*[[RAG]]&lt;br /&gt;
*[[LLM]]&lt;br /&gt;
*[[OpenAI API]]&lt;br /&gt;
*[[프롬프트 엔지니어링]]&lt;br /&gt;
*[[LangChain.js]]&lt;br /&gt;
==참고 문헌==&lt;br /&gt;
*https://www.langchain.com&lt;br /&gt;
*https://python.langchain.com&lt;br /&gt;
*Harrison Chase, &#039;&#039;LangChain: Building Applications with LLMs&#039;&#039;&lt;br /&gt;
[[분류:인공지능]]&lt;br /&gt;
[[분류:프로그래밍]]&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC_os&amp;diff=40461</id>
		<title>파이썬 라이브러리 os</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC_os&amp;diff=40461"/>
		<updated>2025-03-25T04:45:08Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: os는 파이썬 표준 라이브러리 중 하나로, 운영체제와 상호작용할 수 있는 다양한 기능을 제공한다. 파일 및 디렉터리 관리, 환경 변수 접근, 경로 처리, 프로세스 제어 등을 수행할 수 있다. ==개요== os 모듈은 운영체제에 독립적인 방식으로 파일 시스템과 상호작용할 수 있도록 설계되었으며, 플랫폼에 따라 자동으로 적절한 명령을 실행해준다. 따라서 Linux, macOS, Wind...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;os는 파이썬 표준 라이브러리 중 하나로, 운영체제와 상호작용할 수 있는 다양한 기능을 제공한다. 파일 및 디렉터리 관리, 환경 변수 접근, 경로 처리, 프로세스 제어 등을 수행할 수 있다.&lt;br /&gt;
==개요==&lt;br /&gt;
os 모듈은 운영체제에 독립적인 방식으로 파일 시스템과 상호작용할 수 있도록 설계되었으며, 플랫폼에 따라 자동으로 적절한 명령을 실행해준다. 따라서 Linux, macOS, Windows 등 다양한 환경에서 호환성 있게 사용할 수 있다.&lt;br /&gt;
==주요 기능==&lt;br /&gt;
*&#039;&#039;&#039;파일 및 디렉터리 조작&#039;&#039;&#039;&lt;br /&gt;
**파일 생성, 삭제, 이름 변경&lt;br /&gt;
**디렉터리 생성, 이동, 삭제&lt;br /&gt;
*&#039;&#039;&#039;경로 처리&#039;&#039;&#039;&lt;br /&gt;
**경로 결합, 분할, 절대 경로 변환&lt;br /&gt;
**os.path 하위 모듈을 통한 경로 유틸리티 제공&lt;br /&gt;
*&#039;&#039;&#039;환경 변수 접근&#039;&#039;&#039;&lt;br /&gt;
**환경 변수 조회 및 설정&lt;br /&gt;
*&#039;&#039;&#039;프로세스 관련 기능&#039;&#039;&#039;&lt;br /&gt;
**현재 PID, 부모 PID 확인&lt;br /&gt;
**외부 명령 실행 (os.system)&lt;br /&gt;
*&#039;&#039;&#039;플랫폼 정보&#039;&#039;&#039;&lt;br /&gt;
**운영체제 이름 확인, 구분자 확인 등&lt;br /&gt;
==예제 코드==&lt;br /&gt;
다음은 os 모듈의 주요 기능을 사용하는 예제이다.&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
# 현재 작업 디렉터리 확인&lt;br /&gt;
print(&amp;quot;현재 디렉터리:&amp;quot;, os.getcwd())&lt;br /&gt;
&lt;br /&gt;
# 디렉터리 생성&lt;br /&gt;
os.mkdir(&amp;quot;example_dir&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 디렉터리 이동&lt;br /&gt;
os.chdir(&amp;quot;example_dir&amp;quot;)&lt;br /&gt;
print(&amp;quot;이동 후 디렉터리:&amp;quot;, os.getcwd())&lt;br /&gt;
&lt;br /&gt;
# 상위 디렉터리로 이동&lt;br /&gt;
os.chdir(&amp;quot;..&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 파일 존재 여부 확인 및 삭제&lt;br /&gt;
if os.path.exists(&amp;quot;example_dir&amp;quot;):&lt;br /&gt;
    os.rmdir(&amp;quot;example_dir&amp;quot;)  # 빈 디렉터리만 삭제 가능&lt;br /&gt;
&lt;br /&gt;
# 환경 변수 읽기&lt;br /&gt;
home = os.environ.get(&amp;quot;HOME&amp;quot;)&lt;br /&gt;
print(&amp;quot;HOME 환경 변수:&amp;quot;, home)&lt;br /&gt;
&lt;br /&gt;
# 경로 결합&lt;br /&gt;
full_path = os.path.join(home, &amp;quot;Documents&amp;quot;, &amp;quot;test.txt&amp;quot;)&lt;br /&gt;
print(&amp;quot;결합된 경로:&amp;quot;, full_path)&lt;br /&gt;
&lt;br /&gt;
# 시스템 명령어 실행&lt;br /&gt;
os.system(&amp;quot;echo Hello, world!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==자주 사용하는 함수==&lt;br /&gt;
*os.getcwd() — 현재 작업 디렉터리 반환&lt;br /&gt;
*os.chdir(path) — 작업 디렉터리 변경&lt;br /&gt;
*os.mkdir(path) — 디렉터리 생성&lt;br /&gt;
*os.remove(path) — 파일 삭제&lt;br /&gt;
*os.rmdir(path) — 디렉터리 삭제 (비어 있어야 함)&lt;br /&gt;
*os.path.exists(path) — 경로 존재 여부 확인&lt;br /&gt;
*os.path.join(path1, path2, ...) — 경로 결합&lt;br /&gt;
*os.environ — 환경 변수에 접근하는 딕셔너리&lt;br /&gt;
==관련 모듈==&lt;br /&gt;
*&#039;&#039;&#039;os.path&#039;&#039;&#039; — 경로 관련 유틸리티 제공&lt;br /&gt;
*&#039;&#039;&#039;shutil&#039;&#039;&#039; — 고수준 파일/디렉터리 복사, 이동 기능 제공&lt;br /&gt;
*&#039;&#039;&#039;subprocess&#039;&#039;&#039; — 외부 명령어 실행 및 출력 제어&lt;br /&gt;
*&#039;&#039;&#039;platform&#039;&#039;&#039; — 시스템 플랫폼 정보 확인&lt;br /&gt;
==같이 보기==&lt;br /&gt;
*[[shutil (파이썬 라이브러리)]]&lt;br /&gt;
*[[subprocess (파이썬 라이브러리)]]&lt;br /&gt;
*[[pathlib]]&lt;br /&gt;
*[[파이썬 표준 라이브러리]]&lt;br /&gt;
==참고 문헌==&lt;br /&gt;
*https://docs.python.org/3/library/os.html&lt;br /&gt;
[[분류:파이썬]]&lt;br /&gt;
[[분류:프로그래밍]]&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=Node.js_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC_mysql2&amp;diff=40460</id>
		<title>Node.js 라이브러리 mysql2</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=Node.js_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC_mysql2&amp;diff=40460"/>
		<updated>2025-03-22T20:41:56Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: mysql2는 Node.js 환경에서 MySQL 및 MariaDB 데이터베이스와 통신하기 위한 고성능 라이브러리로, 비동기 프로그래밍을 지원하며 `Promise`와 `async/await`을 자연스럽게 사용할 수 있도록 설계되었다. ==개요== mysql2는 기존의 mysql (Node.js 라이브러리)의 성능과 안정성 문제를 개선하기 위해 만들어졌으며, 완전한 호환성을 유지하면서 더 빠른 쿼리 처리 속도와 다양한 기능을...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mysql2는 Node.js 환경에서 MySQL 및 MariaDB 데이터베이스와 통신하기 위한 고성능 라이브러리로, 비동기 프로그래밍을 지원하며 `Promise`와 `async/await`을 자연스럽게 사용할 수 있도록 설계되었다.&lt;br /&gt;
==개요==&lt;br /&gt;
mysql2는 기존의 [[mysql (Node.js 라이브러리)]]의 성능과 안정성 문제를 개선하기 위해 만들어졌으며, 완전한 호환성을 유지하면서 더 빠른 쿼리 처리 속도와 다양한 기능을 제공한다. 또한 MySQL 서버의 최신 기능을 지원하고, 데이터 타입 처리에 대한 호환성도 뛰어나다.&lt;br /&gt;
==주요 특징==&lt;br /&gt;
*&#039;&#039;&#039;Promise API 지원&#039;&#039;&#039; - 비동기 코드에서 async/await 문법 사용 가능&lt;br /&gt;
*&#039;&#039;&#039;Prepared Statement 지원&#039;&#039;&#039; - SQL 인젝션 방지 및 성능 향상&lt;br /&gt;
*&#039;&#039;&#039;빠른 파서(Fast Parser)&#039;&#039;&#039; - 바이너리 프로토콜 기반의 고속 데이터 파싱&lt;br /&gt;
*&#039;&#039;&#039;기존 mysql 라이브러리와 호환&#039;&#039;&#039; - 대부분의 코드가 변경 없이 작동 가능&lt;br /&gt;
*&#039;&#039;&#039;TypeScript 지원&#039;&#039;&#039; - 타입 안정성 향상 및 IDE 자동완성 가능&lt;br /&gt;
==설치==&lt;br /&gt;
npm을 사용하여 mysql2 패키지를 설치한다.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mysql2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==기본 사용 예시==&lt;br /&gt;
===콜백 기반===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const mysql = require(&#039;mysql2&#039;);&lt;br /&gt;
&lt;br /&gt;
const connection = mysql.createConnection({&lt;br /&gt;
  host: &#039;localhost&#039;,&lt;br /&gt;
  user: &#039;root&#039;,&lt;br /&gt;
  database: &#039;test&#039;,&lt;br /&gt;
  password: &#039;password&#039;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
connection.query(&lt;br /&gt;
  &#039;SELECT * FROM users WHERE id = ?&#039;,&lt;br /&gt;
  [1],&lt;br /&gt;
  function (err, results) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    console.log(results);&lt;br /&gt;
  }&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
connection.end();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Promise 기반 (async/await)===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const mysql = require(&#039;mysql2/promise&#039;);&lt;br /&gt;
&lt;br /&gt;
async function main() {&lt;br /&gt;
  const connection = await mysql.createConnection({&lt;br /&gt;
    host: &#039;localhost&#039;,&lt;br /&gt;
    user: &#039;root&#039;,&lt;br /&gt;
    database: &#039;test&#039;,&lt;br /&gt;
    password: &#039;password&#039;&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  const [rows, fields] = await connection.execute(&lt;br /&gt;
    &#039;SELECT * FROM users WHERE id = ?&#039;,&lt;br /&gt;
    [1]&lt;br /&gt;
  );&lt;br /&gt;
  console.log(rows);&lt;br /&gt;
&lt;br /&gt;
  await connection.end();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
main();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Prepared Statement==&lt;br /&gt;
mysql2는 명시적인 prepared statement 기능을 제공한다. 이는 SQL 인젝션을 방지하고 반복 쿼리의 성능을 높일 수 있다.&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const [rows] = await connection.execute(&lt;br /&gt;
  &#039;SELECT * FROM users WHERE email = ? AND status = ?&#039;,&lt;br /&gt;
  [&#039;example@test.com&#039;, &#039;active&#039;]&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==풀(Pool) 사용==&lt;br /&gt;
커넥션 풀은 다수의 동시 요청을 효율적으로 처리할 수 있도록 도와준다.&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const pool = mysql.createPool({&lt;br /&gt;
  host: &#039;localhost&#039;,&lt;br /&gt;
  user: &#039;root&#039;,&lt;br /&gt;
  database: &#039;test&#039;,&lt;br /&gt;
  waitForConnections: true,&lt;br /&gt;
  connectionLimit: 10&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
const [rows] = await pool.execute(&#039;SELECT NOW()&#039;);&lt;br /&gt;
console.log(rows);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==같이 보기==&lt;br /&gt;
*[[Node.js]]&lt;br /&gt;
*[[MySQL]]&lt;br /&gt;
*[[MariaDB]]&lt;br /&gt;
*[[SQL 인젝션]]&lt;br /&gt;
*[[Promise (자바스크립트)]]&lt;br /&gt;
==참고 문헌==&lt;br /&gt;
*https://github.com/sidorares/node-mysql2&lt;br /&gt;
*https://www.npmjs.com/package/mysql2&lt;br /&gt;
[[분류:백엔드]]&lt;br /&gt;
[[분류:프로그래밍]]&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%B9%84%ED%81%AC%EB%A6%BD%ED%8A%B8&amp;diff=40459</id>
		<title>비크립트</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%B9%84%ED%81%AC%EB%A6%BD%ED%8A%B8&amp;diff=40459"/>
		<updated>2025-03-22T19:44:24Z</updated>

		<summary type="html">&lt;p&gt;Retrospect: 새 문서: 비크립트(bcrypt)는 비밀번호와 같은 민감한 데이터를 안전하게 저장하기 위한 해시 함수로, 느린 계산 속도와 솔트(salt)를 통해 무차별 대입 공격(Brute Force Attack) 및 레인보우 테이블 공격(Rainbow Table Attack)에 강한 특징을 가진다. ==개요== bcrypt는 1999년 Niels Provos와 David Mazieres가 발표한 해시 함수로, 원래는 Blowfish 암호 알고리즘 기반으로 설계되었다. 주로 사용자 비밀...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;비크립트(bcrypt)는 비밀번호와 같은 민감한 데이터를 안전하게 저장하기 위한 해시 함수로, 느린 계산 속도와 솔트(salt)를 통해 무차별 대입 공격(Brute Force Attack) 및 레인보우 테이블 공격(Rainbow Table Attack)에 강한 특징을 가진다.&lt;br /&gt;
==개요==&lt;br /&gt;
bcrypt는 1999년 Niels Provos와 David Mazieres가 발표한 해시 함수로, 원래는 Blowfish 암호 알고리즘 기반으로 설계되었다. 주로 사용자 비밀번호를 안전하게 해시하여 데이터베이스에 저장하는 데 사용된다.&lt;br /&gt;
==특징==&lt;br /&gt;
*&#039;&#039;&#039;느린 해싱 속도&#039;&#039;&#039;&lt;br /&gt;
**계산 시간이 고정되어 있지 않고, 의도적으로 느리게 설계되어 GPU 기반 공격에도 강함&lt;br /&gt;
*&#039;&#039;&#039;비밀번호마다 고유한 솔트&#039;&#039;&#039;&lt;br /&gt;
**같은 비밀번호라도 매번 다른 해시값이 생성되어 레인보우 테이블 공격 무력화&lt;br /&gt;
*&#039;&#039;&#039;비용 인자(cost factor) 조절 가능&#039;&#039;&#039;&lt;br /&gt;
**컴퓨팅 성능에 따라 해시 반복 횟수를 조절하여 보안 수준 조정 가능&lt;br /&gt;
*&#039;&#039;&#039;단방향성&#039;&#039;&#039;&lt;br /&gt;
**해시값으로부터 원래 데이터를 복원할 수 없음 (복호화 불가능)&lt;br /&gt;
==작동 방식==&lt;br /&gt;
1. 임의의 솔트(Salt)를 생성한다 (보통 128비트). 2. 솔트를 비밀번호와 결합하여 Blowfish 기반 해시를 여러 번 반복 수행한다. 3. 최종 결과는 솔트와 함께 저장된다.&lt;br /&gt;
==예제 코드==&lt;br /&gt;
다음은 Python의 `bcrypt` 라이브러리를 사용한 비밀번호 해싱 및 검증 예제이다.&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import bcrypt&lt;br /&gt;
&lt;br /&gt;
# 비밀번호 설정&lt;br /&gt;
password = b&amp;quot;my_secure_password&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 솔트를 포함한 해시 생성&lt;br /&gt;
hashed = bcrypt.hashpw(password, bcrypt.gensalt())&lt;br /&gt;
&lt;br /&gt;
# 검증&lt;br /&gt;
if bcrypt.checkpw(password, hashed):&lt;br /&gt;
    print(&amp;quot;비밀번호 일치&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;비밀번호 불일치&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==장점==&lt;br /&gt;
*해킹 시 해시값이 유출되더라도 원래 비밀번호 추정이 어려움&lt;br /&gt;
*솔트 사용으로 동일한 비밀번호에 대해 다른 해시값 생성&lt;br /&gt;
*비용 인자 조절로 향후 컴퓨팅 성능 발전에 대응 가능&lt;br /&gt;
==단점==&lt;br /&gt;
*계산 비용이 높아 자원 소모가 큼 (그러나 보안을 위해 필요한 트레이드오프)&lt;br /&gt;
*빠른 인증 처리를 요구하는 환경에는 부적절할 수 있음&lt;br /&gt;
==관련 알고리즘==&lt;br /&gt;
*[[PBKDF2]]&lt;br /&gt;
*[[scrypt]]&lt;br /&gt;
*[[Argon2]]&lt;br /&gt;
*[[SHA-256]]&lt;br /&gt;
==같이 보기==&lt;br /&gt;
*[[해시 함수]]&lt;br /&gt;
*[[비밀번호 보안]]&lt;br /&gt;
*[[단방향 함수]]&lt;br /&gt;
*[[솔트 (암호학)]]&lt;br /&gt;
==참고 문헌==&lt;br /&gt;
*Provos, N., &amp;amp; Mazieres, D. (1999). &#039;&#039;A Future-Adaptable Password Scheme&#039;&#039;. USENIX Annual Technical Conference.&lt;br /&gt;
*https://github.com/pyca/bcrypt&lt;br /&gt;
[[분류:암호학]]&lt;/div&gt;</summary>
		<author><name>Retrospect</name></author>
	</entry>
</feed>