<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>공돌이의 노트정리</title>
    <link>https://woongheelee.com/</link>
    <description>(사진은 2022년 12월 Georgia Mountain Coaster 타러간 날) 블로그는 전자회로, 마이크로프로세서, 어셈블리어, C언어를 독학하는 과정을 적어두려고 시작했습니다. 게임을 좋아해서 매크로조이스틱을 만들고, 그 과정도 적었습니다.
지금은 소소한 일상, 호기심을 풀어가는 과정을 올리고 있습니다.</description>
    <language>ko</language>
    <pubDate>Sat, 4 Apr 2026 11:26:11 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>공돌이pooh</managingEditor>
    <image>
      <title>공돌이의 노트정리</title>
      <url>https://tistory1.daumcdn.net/tistory/433447/attach/be5a755b36d743d39d1e73c861d04bfc</url>
      <link>https://woongheelee.com</link>
    </image>
    <item>
      <title>GitHub 커밋으로 돌아본 2025년 나의 일</title>
      <link>https://woongheelee.com/entry/GitHub-%EC%BB%A4%EB%B0%8B%EC%9C%BC%EB%A1%9C-%EB%8F%8C%EC%95%84%EB%B3%B8-2025%EB%85%84-%EB%82%98%EC%9D%98-%EC%9D%BC</link>
      <description>&lt;p&gt;&lt;em&gt;(GitHub commit 개수를 기반으로)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;연말이 되면 늘 &amp;quot;올해 뭘 했나&amp;quot;라는 질문을 하게 된다.&lt;br&gt;보고서, 회의, 메일, 실험, 잡무까지 포함하면 기억은 흐릿해진다.&lt;br&gt;그래서 2025년은 &lt;strong&gt;깃 커밋이라는 비교적 솔직한 흔적&lt;/strong&gt;을 기준으로,&lt;br&gt;내가 어떤 일을 어떤 리듬으로 했는지 정리해 보았다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;1) 2025년 주요 작업 묶음별 투입 강도 요약&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;순위&lt;/th&gt;
&lt;th&gt;작업 묶음(깃 리포 이름 익명화)&lt;/th&gt;
&lt;th align=&quot;right&quot;&gt;연간 커밋&lt;/th&gt;
&lt;th&gt;최대 피크&lt;/th&gt;
&lt;th&gt;작업 패턴 요약&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td&gt;정책·기술 동향 분석 시스템&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;strong&gt;~300&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;연초&lt;/td&gt;
&lt;td&gt;연초 초고강도 → 중반 재상승 → 연말 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td&gt;소재 데이터 허브 구축&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;strong&gt;~200&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;연말&lt;/td&gt;
&lt;td&gt;상반기 지속 개발 + 연말 마무리 피크&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td&gt;태양광 실험·모델링·최적화&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;strong&gt;~160&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;여름&lt;/td&gt;
&lt;td&gt;5–10월 중·장기 고강도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td&gt;성과 설명·확산 자동화&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;strong&gt;~120&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;봄·여름&lt;/td&gt;
&lt;td&gt;3–8월 집중, 이후 완화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td&gt;공정/물성 예측 실험&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;strong&gt;~90&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;초가을&lt;/td&gt;
&lt;td&gt;여름 스프린트형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td&gt;채용·평가 지원 자동화&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;strong&gt;~100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;초여름&lt;/td&gt;
&lt;td&gt;채용 시즌 대응형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td&gt;정책 문서 구조화·추출&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;strong&gt;~60&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;봄&lt;/td&gt;
&lt;td&gt;단기 집중 후 종료&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td&gt;이미지 분석 실험&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;strong&gt;~50&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;한 달&lt;/td&gt;
&lt;td&gt;단일 월 집중&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td&gt;소재 구조 분석 파일럿&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;strong&gt;~20&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;한 달&lt;/td&gt;
&lt;td&gt;짧고 굵은 실험&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;숫자가 크다고 반드시 더 중요한 일은 아니지만,&lt;br&gt;&lt;strong&gt;어디에 에너지를 많이 쏟았는지는 꽤 솔직하게 드러난다.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2) 작업 패턴으로 본 2025년의 리듬&lt;/h2&gt;
&lt;h3&gt;① 연중 계속 붙잡고 있던 일&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;정책·기술 동향 분석&lt;/li&gt;
&lt;li&gt;소재 데이터 허브&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 두 작업은 &lt;strong&gt;연중 백본(backbone)&lt;/strong&gt; 역할을 했다.&lt;br&gt;초반에 구조를 잡고, 중간에 확장하고, 연말까지 계속 손을 봤다.&lt;br&gt;&amp;quot;끝났다&amp;quot;기보다는 &amp;quot;계속 진화 중&amp;quot;에 가까운 일들이다.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;② 중·장기 몰입형 과제&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;태양광 실험 데이터 처리&lt;/li&gt;
&lt;li&gt;물리·통계 모델링&lt;/li&gt;
&lt;li&gt;최적화 실험&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 묶음은 단기 스프린트가 아니라,&lt;br&gt;&lt;strong&gt;몇 달 동안 천천히 쌓아 올리는 타입의 일&lt;/strong&gt;이었다.&lt;br&gt;여름과 초가을이 가장 힘들었고,&lt;br&gt;가을에는 결과 정리와 재현성 확보에 집중했다.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;③ 명확한 시즌형 과제&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;공정/물성 예측 실험 → 여름&lt;/li&gt;
&lt;li&gt;채용·평가 지원 → 초여름·연말&lt;/li&gt;
&lt;li&gt;이미지 분석 → 특정 한 달&lt;/li&gt;
&lt;li&gt;정책 문서 자동화 → 봄&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이런 일들은 &lt;strong&gt;일정이 명확해서 강도가 뚜렷&lt;/strong&gt;하다.&lt;br&gt;짧은 기간에 몰아서 하고, 이후에는 거의 손을 대지 않는다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3) 이 정리를 하면서 느낀 점&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;나는 단일 프로젝트형 사람이 아니다&lt;/strong&gt;&lt;br&gt;→ 항상 2–3개의 “계속 가는 일” 위에&lt;br&gt;→ 그때그때 단기 과제가 얹히는 구조였다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;여름은 항상 과부하 구간이다&lt;/strong&gt;&lt;br&gt;→ 실험 + 모델 + 요청 과제가 겹친다.&lt;br&gt;→ 의도적으로 여름 이후 일정은 비워둘 필요가 있다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;깃에 남지 않는 일도 많다&lt;/strong&gt;&lt;br&gt;→ 기획, 설명, 설득, 회의, 조율은 커밋으로 안 남는다.&lt;br&gt;→ 그래서 이 글은 “내가 한 일의 전부”가 아니라&lt;br&gt;&lt;strong&gt;“코드로 남은 일의 지도”에 가깝다.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;마무리&lt;/h2&gt;
&lt;p&gt;이런 식의 회고는&lt;br&gt;성과를 자랑하려는 것도, 생산성을 평가하려는 것도 아니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;p&gt;“나는 어떤 방식으로 일하는 사람인가?”&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;를 스스로에게 설명해 보기 위한 기록이다.&lt;/p&gt;
&lt;p&gt;내년에는 이 지도가 어떻게 바뀔지,&lt;br&gt;어떤 축이 사라지고 어떤 축이 새로 생길지,&lt;br&gt;그걸 또 커밋으로 확인해 볼 생각이다.&lt;/p&gt;</description>
      <category>소소한 일상. 다요리.</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1534</guid>
      <comments>https://woongheelee.com/entry/GitHub-%EC%BB%A4%EB%B0%8B%EC%9C%BC%EB%A1%9C-%EB%8F%8C%EC%95%84%EB%B3%B8-2025%EB%85%84-%EB%82%98%EC%9D%98-%EC%9D%BC#entry1534comment</comments>
      <pubDate>Wed, 7 Jan 2026 20:58:08 +0900</pubDate>
    </item>
    <item>
      <title>Python 프로젝트 기본 구조 자동 생성 스크립트 (init_project.py)</title>
      <link>https://woongheelee.com/entry/Python-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%EB%B3%B8-%EA%B5%AC%EC%A1%B0-%EC%9E%90%EB%8F%99-%EC%83%9D%EC%84%B1-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-initprojectpy</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 프로젝트를 시작할 때마다 디렉토리를 만들고 &lt;code&gt;.env&lt;/code&gt; 설정을 복사하는 일은 꽤 번거롭다.&lt;br /&gt;이번엔 이런 초기 설정 과정을 한 번에 자동으로 만들어주는 스크립트를 작성했다(전체 스크립트는 가장 아래에).&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로젝트 초기화 스크립트 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;init_project.py&lt;/code&gt;는 Python 프로젝트의 기본 디렉토리 구조와 환경설정 파일을 자동으로 생성한다.&lt;br /&gt;한 번 실행하면 &lt;code&gt;src/&lt;/code&gt;, &lt;code&gt;data/&lt;/code&gt;, &lt;code&gt;logs/&lt;/code&gt;, &lt;code&gt;secrets/&lt;/code&gt;, &lt;code&gt;.vscode/&lt;/code&gt; 등 필요한 폴더가 모두 만들어지고,&lt;br /&gt;&lt;code&gt;.env.defaults&lt;/code&gt;, &lt;code&gt;.env.local.example&lt;/code&gt;, &lt;code&gt;.gitignore&lt;/code&gt;, &lt;code&gt;config.py&lt;/code&gt;, &lt;code&gt;config_logs.py&lt;/code&gt; 같은 필수 파일이 자동으로 생성된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용법&lt;/h2&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;python init_project.py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 줄이면 끝이다.&lt;br /&gt;실행 후에는 아래처럼 구조가 자동으로 구성된다:&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;project/
├── src/
│   ├── configs/
│   │   ├── config.py
│   │   └── config_logs.py
│   └── utils/
├── secrets/
│   ├── .env.defaults
│   └── .env.local.example
├── .vscode/
│   └── settings.json
├── data/
├── db/
├── logs/
├── notebooks/
└── .gitignore&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주요 기능 정리&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;.env.defaults&lt;/code&gt; : 비민감 기본 설정 (커밋 가능)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.env.local.example&lt;/code&gt; : 민감정보 템플릿 (커밋 금지)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.gitignore&lt;/code&gt; : Python 캐시, 로그, secrets 폴더 자동 제외&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config.py&lt;/code&gt; : 환경변수 계층 로드, DB 설정, 경로 관리&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config_logs.py&lt;/code&gt; : 콘솔 컬러 로그 + 날짜별 로그 파일 관리&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.vscode/settings.json&lt;/code&gt; : Python 인터프리터와 기본 분석 옵션&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실행 후 바로 확인할 것&lt;/h2&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;cp secrets/.env.local.example secrets/.env.local
# .env.local 파일을 열어 실제 API 키 입력&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;환경을 설정한 뒤 다음 명령으로 확인한다:&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;python src/configs/config.py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;.env.defaults&lt;/code&gt;와 &lt;code&gt;.env.local&lt;/code&gt;이 제대로 로드되는지, 누락된 키가 없는지 자동으로 출력된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;구성 예시&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;config.py&lt;/code&gt;는 &lt;code&gt;.env.defaults&lt;/code&gt; &amp;rarr; &lt;code&gt;.env.local&lt;/code&gt; 순서로 로드한다.&lt;br /&gt;로컬 설정이 기본값을 덮어쓰며, &lt;code&gt;dotenv&lt;/code&gt; 패키지를 사용한다.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;from src.configs.config import PATHS, DB_CONFIG
from src.configs.config_logs import setup_root_logger, setup_logger

setup_root_logger(&quot;myapp&quot;)
logger = setup_logger(__name__)

logger.info(f&quot;Data directory: {PATHS['data']}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 콘솔에는 컬러 로그가 표시되고,&lt;br /&gt;&lt;code&gt;logs/YYYYMMDD-myapp.log&lt;/code&gt; 파일에 자동으로 기록된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 스크립트를 쓰면 프로젝트 시작 준비 시간이 10분에서 10초로 줄어든다.&lt;br /&gt;특히 여러 프로젝트를 병행하는 경우, 일관된 디렉토리 구조를 유지하기에 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요한 기본 구조를 한 번에 만들어주는 초기화 스크립트로 이제 새 프로젝트를 만들 때 더 이상 손으로 설정할 일은 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/ea7cdb38066c7f1ea2a72280e2aeaaa1.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;</description>
      <category>노트정리/파이썬 Python</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1533</guid>
      <comments>https://woongheelee.com/entry/Python-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%EB%B3%B8-%EA%B5%AC%EC%A1%B0-%EC%9E%90%EB%8F%99-%EC%83%9D%EC%84%B1-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-initprojectpy#entry1533comment</comments>
      <pubDate>Mon, 27 Oct 2025 10:01:31 +0900</pubDate>
    </item>
    <item>
      <title>브라이언 W. 커니핸 씀, 하성창 옮김 (2020), 유닉스의 탄생 (세상을 바꾼 운영체제를 만든 천재들의 숨은 이야기), 한빛미디어</title>
      <link>https://woongheelee.com/entry/%EB%B8%8C%EB%9D%BC%EC%9D%B4%EC%96%B8-W-%EC%BB%A4%EB%8B%88%ED%95%B8-%EC%A0%80%ED%95%98%EC%84%B1%EC%B0%BD-%EC%97%AD-2020-%EC%9C%A0%EB%8B%89%EC%8A%A4%EC%9D%98-%ED%83%84%EC%83%9D-%EC%84%B8%EC%83%81%EC%9D%84-%EB%B0%94%EA%BE%BC-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EB%A5%BC-%EB%A7%8C%EB%93%A0-%EC%B2%9C%EC%9E%AC%EB%93%A4%EC%9D%98-%EC%88%A8%EC%9D%80-%EC%9D%B4%EC%95%BC%EA%B8%B0-%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;결혼식을&amp;nbsp;앞두고&amp;nbsp;평소&amp;nbsp;존경하는&amp;nbsp;동료&amp;nbsp;한&amp;nbsp;분께&amp;nbsp;선물로&amp;nbsp;받은&amp;nbsp;책이다. &lt;br /&gt;&lt;br /&gt;식장&amp;nbsp;준비로&amp;nbsp;바쁜&amp;nbsp;시기였지만,&amp;nbsp;신랑은&amp;nbsp;대기&amp;nbsp;시간이&amp;nbsp;긴&amp;nbsp;법이라&amp;nbsp;그&amp;nbsp;틈틈이&amp;nbsp;읽기&amp;nbsp;시작했고,&amp;nbsp;추석&amp;nbsp;연휴&amp;nbsp;동안&amp;nbsp;여유롭게&amp;nbsp;완독할&amp;nbsp;수&amp;nbsp;있었다. &lt;br /&gt;&lt;br /&gt;내가&amp;nbsp;평소&amp;nbsp;애용하는&amp;nbsp;리눅스의&amp;nbsp;뿌리라&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;유닉스가&amp;nbsp;벨&amp;nbsp;연구소에서&amp;nbsp;어떻게&amp;nbsp;탄생했는지,&amp;nbsp;그리고&amp;nbsp;그&amp;nbsp;과정에서&amp;nbsp;어떤&amp;nbsp;사람들이&amp;nbsp;어떤&amp;nbsp;철학과&amp;nbsp;배경&amp;nbsp;속에서&amp;nbsp;시스템을&amp;nbsp;구성해&amp;nbsp;나갔는지가&amp;nbsp;생생하게&amp;nbsp;담겨&amp;nbsp;있다. &lt;br /&gt;예전부터&amp;nbsp;&quot;이&amp;nbsp;명령어&amp;nbsp;이름은&amp;nbsp;도대체&amp;nbsp;왜&amp;nbsp;이럴까?&quot;&amp;nbsp;싶었던&amp;nbsp;것들,&amp;nbsp;&quot;이건&amp;nbsp;누가&amp;nbsp;만들었을까?&quot;&amp;nbsp;싶은&amp;nbsp;도구들에&amp;nbsp;대한&amp;nbsp;유래를&amp;nbsp;하나하나&amp;nbsp;확인하는&amp;nbsp;즐거움이&amp;nbsp;컸다. &lt;br /&gt;읽으면&amp;nbsp;읽을수록&amp;nbsp;아쉬움이&amp;nbsp;커져서,&amp;nbsp;마지막&amp;nbsp;장을&amp;nbsp;덮을&amp;nbsp;때는&amp;nbsp;오랜만에&amp;nbsp;진한&amp;nbsp;여운이&amp;nbsp;남았다. &lt;br /&gt;&lt;br /&gt;또&amp;nbsp;하나&amp;nbsp;인상&amp;nbsp;깊었던&amp;nbsp;점은&amp;nbsp;유닉스가&amp;nbsp;태어난&amp;nbsp;곳이&amp;nbsp;기업의&amp;nbsp;연구소였음에도&amp;nbsp;불구하고,&amp;nbsp;순수&amp;nbsp;연구에&amp;nbsp;가까운&amp;nbsp;자유롭고&amp;nbsp;실험적인&amp;nbsp;분위기였다.&amp;nbsp;그런&amp;nbsp;환경이&amp;nbsp;부럽게&amp;nbsp;느껴졌고,&amp;nbsp;나&amp;nbsp;또한&amp;nbsp;다행히&amp;nbsp;지금&amp;nbsp;하고&amp;nbsp;있는&amp;nbsp;일이&amp;nbsp;재미있다고&amp;nbsp;느낀다는&amp;nbsp;사실에&amp;nbsp;위안을&amp;nbsp;얻었다.&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1532</guid>
      <comments>https://woongheelee.com/entry/%EB%B8%8C%EB%9D%BC%EC%9D%B4%EC%96%B8-W-%EC%BB%A4%EB%8B%88%ED%95%B8-%EC%A0%80%ED%95%98%EC%84%B1%EC%B0%BD-%EC%97%AD-2020-%EC%9C%A0%EB%8B%89%EC%8A%A4%EC%9D%98-%ED%83%84%EC%83%9D-%EC%84%B8%EC%83%81%EC%9D%84-%EB%B0%94%EA%BE%BC-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EB%A5%BC-%EB%A7%8C%EB%93%A0-%EC%B2%9C%EC%9E%AC%EB%93%A4%EC%9D%98-%EC%88%A8%EC%9D%80-%EC%9D%B4%EC%95%BC%EA%B8%B0-%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4#entry1532comment</comments>
      <pubDate>Sat, 11 Oct 2025 01:24:21 +0900</pubDate>
    </item>
    <item>
      <title>CentOS 서버에서 Ubuntu 컨테이너로 프록시점프(ProxyJump) 연결하기 (VS Code Remote-SSH 활용)</title>
      <link>https://woongheelee.com/entry/CentOS-%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-Ubuntu-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EB%A1%9C-%ED%94%84%EB%A1%9D%EC%8B%9C%EC%A0%90%ED%94%84ProxyJump-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-VS-Code-Remote-SSH-%ED%99%9C%EC%9A%A9</link>
      <description>&lt;h1&gt;프록시 점프(ProxyJump) 세팅 가이드&lt;/h1&gt;
&lt;h2&gt;1. 배경과 동기&lt;/h2&gt;
&lt;p&gt;CentOS 서버 환경은 Ubuntu만 사용하던 사용자에게 다소 불편할 수 있다.&lt;br&gt;이를 해결하기 위해 &lt;strong&gt;CentOS 메인 서버 안에서 Ubuntu 22.04 컨테이너를 띄우고&lt;/strong&gt;, 로컬 PC → CentOS 서버 → Ubuntu 컨테이너로 점프(ProxyJump)하는 방식으로 접속 환경을 구성할 수 있다.  &lt;/p&gt;
&lt;p&gt;이렇게 설정하면:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;익숙한 Ubuntu 환경에서 작업 가능&lt;/li&gt;
&lt;li&gt;VS Code의 &lt;strong&gt;Remote-SSH&lt;/strong&gt; 확장과 연동하여 바로 컨테이너에 접속 가능&lt;/li&gt;
&lt;li&gt;서버 관리와 개발 환경 분리 용이  &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. &lt;code&gt;.ssh/config&lt;/code&gt; 설정 예시&lt;/h2&gt;
&lt;p&gt;아래는 로컬 PC의 &lt;code&gt;~/.ssh/config&lt;/code&gt; 파일에 넣을 수 있는 예시 설정이다.&lt;br&gt;실제 환경에서는 &lt;strong&gt;IP, 포트, 서버 이름을 적절히 변경&lt;/strong&gt;하여 사용하면 된다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ssh&quot;&gt;# Ubuntu 컨테이너 접속용 설정
Host Lab-Ubuntu22-Container
HostName 127.0.0.1
Port 6789
User dev
ProxyJump Lab-CentOS-Main
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
StrictHostKeyChecking accept-new
UserKnownHostsFile ~/.ssh/known_hosts.d/Lab-Ubuntu22-Container

# CentOS 메인 서버 접속용 설정
Host Lab-CentOS-Main
HostName 123.4.567.89
Port 2345
User researcher
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
StrictHostKeyChecking accept-new
UserKnownHostsFile ~/.ssh/known_hosts.d/Lab-CentOS-Main&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;주요 설정 설명&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host&lt;/strong&gt;: 로컬에서 부르는 별칭 (VS Code에서 이 이름으로 접속)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ProxyJump&lt;/strong&gt;: 중간 서버를 통해 최종 목적지에 접속하도록 지정&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IdentityFile&lt;/strong&gt;: 개인 키 파일 경로 (&lt;code&gt;ed25519&lt;/code&gt; 사용 권장)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;StrictHostKeyChecking accept-new&lt;/strong&gt;: 처음 접속 시 자동으로 호스트 키 추가&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UserKnownHostsFile&lt;/strong&gt;: 접속 대상별 별도 known_hosts 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. VS Code Remote-SSH 접속 방법&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;VS Code에서 &lt;strong&gt;Remote-SSH&lt;/strong&gt; 확장을 설치한다.&lt;/li&gt;
&lt;li&gt;커맨드 팔레트(&lt;code&gt;Ctrl+Shift+P&lt;/code&gt;) → &lt;code&gt;Remote-SSH: Connect to Host...&lt;/code&gt; 선택&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.ssh/config&lt;/code&gt;에 설정한 &lt;strong&gt;별칭(예: &lt;code&gt;Lab-Ubuntu22-Container&lt;/code&gt;)&lt;/strong&gt; 선택&lt;/li&gt;
&lt;li&gt;정상적으로 프록시 점프를 통해 Ubuntu 컨테이너에 접속 가능&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;4. 권장 보안 설정&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id_rsa&lt;/code&gt; 대신 &lt;strong&gt;ed25519 키&lt;/strong&gt; 사용 (보안 강도 및 성능 우수)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ssh-keygen -t ed25519 -C &amp;quot;your_email@example.com&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;필요하다면 &lt;code&gt;~/.ssh/config&lt;/code&gt; 내에 &lt;code&gt;ForwardAgent no&lt;/code&gt; 등을 추가하여 보안 강화&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>노트정리/리눅스 linux</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1531</guid>
      <comments>https://woongheelee.com/entry/CentOS-%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-Ubuntu-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EB%A1%9C-%ED%94%84%EB%A1%9D%EC%8B%9C%EC%A0%90%ED%94%84ProxyJump-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-VS-Code-Remote-SSH-%ED%99%9C%EC%9A%A9#entry1531comment</comments>
      <pubDate>Mon, 25 Aug 2025 20:12:48 +0900</pubDate>
    </item>
    <item>
      <title>Windows + WSL 환경에서 Claude CLI 설치 매뉴얼</title>
      <link>https://woongheelee.com/entry/Windows-WSL-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-Claude-CLI-%EC%84%A4%EC%B9%98-%EB%A7%A4%EB%89%B4%EC%96%BC</link>
      <description>&lt;p&gt;이 문서는 Windows에서 WSL을 설치하고, Ubuntu 24.04 LTS를 수동으로 등록한 후, WSL 내부에서 Node.js 및 Claude CLI(&lt;code&gt;@anthropic-ai/claude-code&lt;/code&gt;)를 설치하는 방법을 설명한다. 모든 작업은 WSL 내부에서 root 사용자로 실행된다는 가정을 따른다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;1. WSL 설치 및 Ubuntu 24.04 수동 등록&lt;/h2&gt;
&lt;h3&gt;1.1 WSL 활성화 및 기본 설정&lt;/h3&gt;
&lt;p&gt;PowerShell을 &lt;strong&gt;관리자 권한으로 실행&lt;/strong&gt;한 뒤 아래 명령을 입력한다:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;wsl --install&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;설치 완료 후 재부팅이 필요하다. 보통 Ubuntu 기본 배포판을 &lt;code&gt;wsl --list --online&lt;/code&gt;으로 유효한 배포 목록 확인 후 &lt;code&gt;wsl --install -d Ubuntu-24.04&lt;/code&gt; 등으로 쉽게 설치할 수 있다. 그러나 컴퓨터 사용 환경에 따라 (네트워크 방화벽) 불가능 할 수 있으므로, 여기서는 &lt;strong&gt;24.04 LTS를 수동 설치&lt;/strong&gt;방법을 알아본다.&lt;/p&gt;
&lt;h3&gt;1.2 Ubuntu 24.04 LTS 이미지 다운로드&lt;/h3&gt;
&lt;p&gt;Ubuntu 24.04 LTS WSL용 &lt;code&gt;.wsl&lt;/code&gt; 이미지 파일은 아래 URL에서 받을 수 있다. 해당 이미지는 Microsoft와 Canonical이 배포하는 공식 설치 파일이며, &lt;code&gt;.tar.gz&lt;/code&gt; 형식이 아닌 &lt;strong&gt;WSL 전용 &lt;code&gt;.wsl&lt;/code&gt; 파일&lt;/strong&gt;이다. &lt;code&gt;curl&lt;/code&gt;을 사용하여 직접 다운로드할 수 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;curl -L -o ubuntu-24.04.wsl https://releases.ubuntu.com/noble/ubuntu-24.04.wsl&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;해당 이미지의 SHA256 해시를 &lt;code&gt;sha256sum ubuntu-24.04.wsl&lt;/code&gt; 명령어 등을 사용하여 확인한다.&lt;/p&gt;
&lt;p&gt;다운로드한 &lt;code&gt;.wsl&lt;/code&gt; 파일은 &lt;code&gt;wsl --import&lt;/code&gt; 명령어로 바로 등록할 수 있다(압축 해제 불필요).&lt;/p&gt;
&lt;h3&gt;1.3 다운로드한 이미지 압축 해제 및 등록&lt;/h3&gt;
&lt;p&gt;예를 들어 &lt;code&gt;/d/WSL/Ubuntu-24.04&lt;/code&gt; 디렉토리를 만든 뒤 다음을 수행:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir /d/WSL/Ubuntu-24.04
cd /d/WSL/Ubuntu-24.04

# 다운로드한 .wsl 이미지 기준 등록
wsl --import Ubuntu-24.04 /d/WSL/Ubuntu-24.04 ./ubuntu-24.04.wsl&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;1.4 Ubuntu 24.04 실행 및 기본 설정&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;wsl -d Ubuntu-24.04&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;2. WSL 내부에서 기본 도구 설치&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;apt update &amp;amp;&amp;amp; apt upgrade -y
apt install -y curl&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;3. Node.js 및 npm 설치&lt;/h2&gt;
&lt;h3&gt;3.1 NodeSource 설치 스크립트 사용 (Node.js 22 기준)&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;설치 확인:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;node -v
npm -v&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;4. WSL 전용 npm 글로벌 경로 설정&lt;/h2&gt;
&lt;h3&gt;4.1 사용자 전용 경로 생성 및 prefix 설정&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p ~/.npm-global/bin
npm config set prefix ~/.npm-global&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;5. bashrc 분리 설정 (다른 쉘, 예를 들어 Git Bash와 충돌 방지)&lt;/h2&gt;
&lt;h3&gt;5.1 &lt;code&gt;~/.bashrc_wsl&lt;/code&gt; 파일 생성&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;vi ~/.bashrc_wsl&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;아래 내용 입력:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# claude 실행용 Node.js + npm 설정
export PATH=$HOME/.npm-global/bin:$PATH

# Windows 쪽 NPM 경로 제거
export PATH=$(echo $PATH | tr &amp;#39;:&amp;#39; &amp;#39;\n&amp;#39; | grep -v &amp;#39;/mnt/c/Users/&amp;lt;YOUR-WINDOWS-USERNAME&amp;gt;/AppData/Roaming/npm&amp;#39; | paste -sd:)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위에서 &lt;code&gt;&amp;lt;YOUR-WINDOWS-USERNAME&amp;gt;&lt;/code&gt; 부분에 사용자의 윈도우 계정 이름을 넣어준다.&lt;br&gt;Windows 사용자 계정 이름을 정확히 모르겠다면 &lt;code&gt;echo $USER&lt;/code&gt; 또는 PowerShell에서 &lt;code&gt;$env:USERNAME&lt;/code&gt;으로 확인 가능하다.&lt;/p&gt;
&lt;h3&gt;5.2 &lt;code&gt;~/.bashrc&lt;/code&gt;에 분기 추가&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;vi ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;맨 아래에 다음을 추가:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# WSL 환경에서만 ~/.bashrc_wsl 실행
if grep -qi microsoft /proc/version; then
  [ -f &amp;quot;$HOME/.bashrc_wsl&amp;quot; ] &amp;amp;&amp;amp; source &amp;quot;$HOME/.bashrc_wsl&amp;quot;
fi&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;변경 적용:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;source ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;6. Claude CLI 설치&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install -g @anthropic-ai/claude-code&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;설치 후 확인:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;which claude&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;예상 출력:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/root/.npm-global/bin/claude&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2&gt;7. 실행 테스트&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;claude code&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;정상 실행되면 설치 완료.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;부록: WSL 자동 진입 스크립트 예시 (PowerShell 또는 Git Bash용)&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;wsl-ubuntu.sh&lt;/code&gt; 파일 작성:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;#!/bin/bash
wsl -d Ubuntu-24.04 --exec bash -l&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;실행 권한 부여:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;chmod +x wsl-ubuntu.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 스크립트를 실행하면 &lt;code&gt;.bashrc&lt;/code&gt; 설정이 자동으로 반영된 WSL 세션에 진입한다.&lt;/p&gt;</description>
      <category>노트정리/리눅스 linux</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1530</guid>
      <comments>https://woongheelee.com/entry/Windows-WSL-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-Claude-CLI-%EC%84%A4%EC%B9%98-%EB%A7%A4%EB%89%B4%EC%96%BC#entry1530comment</comments>
      <pubDate>Tue, 22 Jul 2025 12:41:59 +0900</pubDate>
    </item>
    <item>
      <title>Obsidian, Zettlr, Notion 등에서 논문과 메모를 유기적으로 연결하기</title>
      <link>https://woongheelee.com/entry/Obsidian-Zettlr-Notion-%EB%93%B1%EC%97%90%EC%84%9C-%EB%85%BC%EB%AC%B8%EA%B3%BC-%EB%A9%94%EB%AA%A8%EB%A5%BC-%EC%9C%A0%EA%B8%B0%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;code&gt;Zotero와 함께 쓰는 링크 자동 복사 스크립트 설정 방법&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;요즘 들어 논문을 읽고 어떻게 정리할지에 대한 고민을 하면서, 논문을 읽으며 하는 메모와 논문 원본 파일 등을 어떻게 하면 유기적으로 정리할까에 대한 아이디어를 구상해보았다. 핵심은 논문을 읽으며 하는 메모는 텍스트 파일로 적고 정리하되, 논문 PDF 파일은 바이너리 파일이므로 따로 저장하는 방식을 쓰는 것이다. 그러면 이런 서로 다른 형태의 파일들의 유기적 연결은 어떻게 할까? 텍스트 파일에 링크를 넣어두면 해결 되는 것이다.&lt;/p&gt;
&lt;p&gt;요약하면, 내가 만드는 메모는 zettlr를 이용해서 마크다운 파일에 하고, PDF 파일은 zotero의 저장 공간에 링크만 걸어서 유기성을 확보하는 것이다.&lt;/p&gt;
&lt;p&gt;이 때 연결 고리로 Zotero 웹 링크를 사요할 수도 있지만, 이건 어플리케이션에서 직접 논문 항목을 여는 데는 무용지물이다. 내가 필요한 건 Zotero에서 특정 논문을 선택하고 바로 &amp;quot;Zotero 앱에서 열 수 있는 링크&amp;quot;를 만들어서 클립보드에 복사해주는 기능. 그래서 메모에 &lt;code&gt;[이 논문 보기](zotero://...)&lt;/code&gt; 형태로 붙여놓고, 클릭하면 Zotero가 열리도록 말이다.&lt;/p&gt;
&lt;p&gt;결국 이 기능을 구현할 수 있는 방법을 찾았고, 만족스럽게 활용 중이다. 이 글은 그 과정을 정리한 것이다. 비슷한 고민을 하는 분들께 도움이 되기를.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;1. Zotero에서 직접 열리는 링크란?&lt;/h2&gt;
&lt;p&gt;Zotero는 &lt;code&gt;zotero://select/library/items/XXXX&lt;/code&gt; 형태의 URI 스킴을 제공한다. 이를 통해 외부 앱(Obsidian, Zettlr 등)에서 이 링크를 클릭하면, Zotero 데스크톱 앱이 자동으로 열리고 해당 항목을 하이라이트해준다.&lt;/p&gt;
&lt;p&gt;단점은 이 링크를 자동으로 생성해주는 기본 기능이 없다는 점이다. 대신 플러그인과 스크립트를 조합하면 가능하다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. 준비물: 플러그인 설치&lt;/h2&gt;
&lt;h3&gt;필수 플러그인: Actions &amp;amp; Tags&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Zotero 버전 7 부터는 이 플러그인을 사용하는게 논문 별 URI 생성에 좋다&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/windingwind/zotero-actions-tags/releases&quot;&gt;Zotero Actions &amp;amp; Tags GitHub 페이지&lt;/a&gt;에서 &lt;code&gt;.xpi&lt;/code&gt; 파일을 내려받는다.&lt;/li&gt;
&lt;li&gt;Zotero 데스크톱 앱에서 메뉴 바 → &lt;code&gt;Tools&lt;/code&gt; → &lt;code&gt;Plugins&lt;/code&gt; → 우측 상단 톱니바퀴 → &lt;code&gt;Install Plugin From File&lt;/code&gt; 선택&lt;/li&gt;
&lt;li&gt;다운로드한 &lt;code&gt;.xpi&lt;/code&gt; 파일을 선택하면 설치된다.&lt;/li&gt;
&lt;li&gt;Zotero를 재시작한다. (생략해도 됨)&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. 스크립트 설정&lt;/h2&gt;
&lt;h3&gt;설정 방법:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Edit&lt;/code&gt; → &lt;code&gt;Settings&lt;/code&gt; → &lt;code&gt;Actions &amp;amp; Tags&lt;/code&gt; 탭으로 이동&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;+&lt;/code&gt; 버튼 클릭 → 다음 항목을 채운다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operation&lt;/strong&gt;: &lt;code&gt;Script&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;필요하다면 &lt;strong&gt;Shortcut&lt;/strong&gt;: 단축키 지정 (예: &lt;code&gt;Ctrl+Alt+C&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Menu Label&lt;/strong&gt;: 예: &lt;code&gt;Copy Item Link&lt;/code&gt; (이걸 채워야 논문 우클릭으로 스크립트 실행이 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;아래 스크립트 입력: (스크립트 출처: &lt;a href=&quot;https://github.com/windingwind/zotero-actions-tags/discussions/115&quot;&gt;https://github.com/windingwind/zotero-actions-tags/discussions/115&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;// @author windingwind
// @usage Select an item in the library and press the assigned shortcut keys
// @update 2025-07-21

let linkTextField = &amp;quot;title&amp;quot;; 
let linkType = &amp;quot;md&amp;quot;;         
let useColl = false;         

if (!item) return &amp;quot;[Copy Item Link] item is empty&amp;quot;;

const uriParts = [&amp;quot;zotero://select&amp;quot;];
let libraryType = item.library.libraryType;
if (libraryType === &amp;quot;user&amp;quot;) {
  uriParts.push(&amp;quot;library&amp;quot;);
} else {
  uriParts.push(`groups/${Zotero.Libraries.get(item.libraryID).groupID}`);
}
if (useColl) {
  let coll = Zotero.getActiveZoteroPane().getSelectedCollection();
  if (coll) {
    uriParts.push(`collections/${coll.key}`);
  }
}
uriParts.push(`items/${item.key}`);
let uri = uriParts.join(&amp;quot;/&amp;quot;);

let linkText = item.getField(linkTextField);
const clipboard = new Zotero.ActionsTags.api.utils.ClipboardHelper();
if (linkType === &amp;quot;html&amp;quot;) {
  clipboard.addText(`&amp;lt;a href=&amp;quot;${uri}&amp;quot;&amp;gt;${linkText}&amp;lt;/a&amp;gt;`, &amp;quot;text/unicode&amp;quot;);
} else if (linkType === &amp;quot;md&amp;quot;) {
  clipboard.addText(`[${linkText}](${uri})`, &amp;quot;text/unicode&amp;quot;);
} else {
  clipboard.addText(uri, &amp;quot;text/unicode&amp;quot;);
}
clipboard.copy();
return `[Copy Item Link] item link copied: ${uri}`;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;4. 활용법: Zettlr, Obsidian 등에서의 연동&lt;/h2&gt;
&lt;p&gt;이제 Zotero에서 논문을 하나 선택하고, 위에서 설정한 단축키를 누르면, &lt;code&gt;[논문 제목](zotero://select/library/items/XXXX)&lt;/code&gt; 형태의 Markdown 링크가 클립보드에 복사된다. Obsidian, Zettlr 등에 그대로 붙여 넣기만 하면 된다. 클릭하면 Zotero 앱이 열리고 해당 논문이 바로 표시된다.&lt;/p&gt;</description>
      <category>소소한 일상. 다요리.</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1529</guid>
      <comments>https://woongheelee.com/entry/Obsidian-Zettlr-Notion-%EB%93%B1%EC%97%90%EC%84%9C-%EB%85%BC%EB%AC%B8%EA%B3%BC-%EB%A9%94%EB%AA%A8%EB%A5%BC-%EC%9C%A0%EA%B8%B0%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0#entry1529comment</comments>
      <pubDate>Mon, 21 Jul 2025 12:43:31 +0900</pubDate>
    </item>
    <item>
      <title>데이비드 스피겔할터 씀, 양병찬 옮김 (2025) 불확실성에 맞서는 기술 (실업률, 주식, 전쟁, 기후위기, AI까지), 생각의힘</title>
      <link>https://woongheelee.com/entry/%EB%8D%B0%EC%9D%B4%EB%B9%84%EB%93%9C-%EC%8A%A4%ED%94%BC%EA%B2%94%ED%95%A0%ED%84%B0-%EC%94%80-%EC%96%91%EB%B3%91%EC%B0%AC-%EC%98%AE%EA%B9%80-2025-%EB%B6%88%ED%99%95%EC%8B%A4%EC%84%B1%EC%97%90-%EB%A7%9E%EC%84%9C%EB%8A%94-%EA%B8%B0%EC%88%A0-%EC%8B%A4%EC%97%85%EB%A5%A0-%EC%A3%BC%EC%8B%9D-%EC%A0%84%EC%9F%81-%EA%B8%B0%ED%9B%84%EC%9C%84%EA%B8%B0-AI%EA%B9%8C%EC%A7%80-%EC%83%9D%EA%B0%81%EC%9D%98%ED%9E%98</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;이전에 읽었던 `&lt;u&gt;&lt;i&gt;&lt;a href=&quot;https://woongheelee.com/entry/%EB%8D%B0%EC%9D%B4%EB%B9%84%EB%93%9C-%EC%8A%A4%ED%94%BC%EA%B2%94%ED%95%A0%ED%84%B0-%EC%A0%80-%EA%B6%8C%ED%98%9C%EC%8A%B9-%EA%B9%80%EC%98%81%ED%9B%88-%EC%97%AD-2020-%EC%88%AB%EC%9E%90%EC%97%90-%EC%95%BD%ED%95%9C-%EC%82%AC%EB%9E%8C%EB%93%A4%EC%9D%84-%EC%9C%84%ED%95%9C-%ED%86%B5%EA%B3%84%ED%95%99-%EC%88%98%EC%97%85-%EC%9B%85%EC%A7%84%EC%A7%80%EC%8B%9D%ED%95%98%EC%9A%B0%EC%8A%A4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;데이비드 스피겔할터의 숫자에 약한 사람들을 위한 통계학 수업&lt;/a&gt;&lt;/i&gt;&lt;/u&gt;`이 인상 깊었기에, 같은 저자의 신간이라는 소식을 듣고 기대를 안고 책을 집어 들었다. &lt;br /&gt;&lt;br /&gt;전작은 엑셀을 곁에 두고 자잘한 계산들을 따라가며 읽는 재미가 있었던 반면, 이번 책은 그런 요소보다는 휘리릭 읽히는 서술이 많았다. 또한 원제가 The Art of Uncertainty인 만큼, 이번 책에서도 통계를 다루지만, 보다 넓은 맥락에서 '불확실성'을 이해하는 데 초점이 맞춰져 있다.&lt;br /&gt;&lt;br /&gt;저자가 베이지안 통계학자이기에, 개인적으로는 이번 책에서 베이지안 관점의 통계적 기술을 보다 깊이 있게 다뤄주기를 기대했다. 그러나 정작 내가 기대했던 방식으로 이야기를 풀어가지는 않아 약간의 아쉬움이 남는다. &lt;br /&gt;&lt;br /&gt;책 전체를 읽기보다는 저자가 핵심 메시지를 간결하게 전한 글을 먼저 접하고 싶다면, 저자가 네이처에 기고한 다음의 에세이를 추천한다: &lt;b&gt;&lt;i&gt;&lt;a href=&quot;https://www.nature.com/articles/d41586-024-04096-5&quot;&gt;Why probability probably doesn&amp;rsquo;t exist (but it is useful to act like it does)&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;이&amp;nbsp;짧은&amp;nbsp;글에서&amp;nbsp;저자는&amp;nbsp;이&amp;nbsp;책에서&amp;nbsp;다루는&amp;nbsp;주제의&amp;nbsp;핵심을&amp;nbsp;잘&amp;nbsp;요약하고&amp;nbsp;있다. &lt;br /&gt;&lt;br /&gt;책은&amp;nbsp;회사&amp;nbsp;도서관에서&amp;nbsp;대출하여&amp;nbsp;주말마다&amp;nbsp;시간을&amp;nbsp;나눠&amp;nbsp;읽었고,&amp;nbsp;총&amp;nbsp;7시간이&amp;nbsp;채&amp;nbsp;걸리지&amp;nbsp;않았다.&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1528</guid>
      <comments>https://woongheelee.com/entry/%EB%8D%B0%EC%9D%B4%EB%B9%84%EB%93%9C-%EC%8A%A4%ED%94%BC%EA%B2%94%ED%95%A0%ED%84%B0-%EC%94%80-%EC%96%91%EB%B3%91%EC%B0%AC-%EC%98%AE%EA%B9%80-2025-%EB%B6%88%ED%99%95%EC%8B%A4%EC%84%B1%EC%97%90-%EB%A7%9E%EC%84%9C%EB%8A%94-%EA%B8%B0%EC%88%A0-%EC%8B%A4%EC%97%85%EB%A5%A0-%EC%A3%BC%EC%8B%9D-%EC%A0%84%EC%9F%81-%EA%B8%B0%ED%9B%84%EC%9C%84%EA%B8%B0-AI%EA%B9%8C%EC%A7%80-%EC%83%9D%EA%B0%81%EC%9D%98%ED%9E%98#entry1528comment</comments>
      <pubDate>Mon, 14 Jul 2025 21:12:25 +0900</pubDate>
    </item>
    <item>
      <title>칩 후옌 씀, 김대근, 김영민 번역 (2023), 머신러닝 시스템 설계, 한빛미디어</title>
      <link>https://woongheelee.com/entry/%EC%B9%A9-%ED%9B%84%EC%98%8C-%EC%94%80-%EA%B9%80%EB%8C%80%EA%B7%BC-%EA%B9%80%EC%98%81%EB%AF%BC-%EB%B2%88%EC%97%AD-2023-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%84%A4%EA%B3%84-%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;박사과정을&amp;nbsp;마친&amp;nbsp;뒤&amp;nbsp;포닥&amp;nbsp;생활을&amp;nbsp;거쳐&amp;nbsp;연구원으로&amp;nbsp;자리를&amp;nbsp;옮기면서,&amp;nbsp;처음으로&amp;nbsp;본격적인&amp;nbsp;실전&amp;nbsp;환경에&amp;nbsp;맞닥뜨렸다.&amp;nbsp;연구실에서&amp;nbsp;설계하고&amp;nbsp;검증했던&amp;nbsp;모델들이&amp;nbsp;현실의&amp;nbsp;제약과&amp;nbsp;복잡한&amp;nbsp;맥락&amp;nbsp;속에서&amp;nbsp;어떻게&amp;nbsp;작동해야&amp;nbsp;하는지를&amp;nbsp;마주하며,&amp;nbsp;나&amp;nbsp;역시&amp;nbsp;점차&amp;nbsp;실전&amp;nbsp;중심의&amp;nbsp;관점으로&amp;nbsp;스스로를&amp;nbsp;재구성해가는&amp;nbsp;과정에&amp;nbsp;있었다.&amp;nbsp;그런&amp;nbsp;시점에서&amp;nbsp;Chip&amp;nbsp;Huyen의&amp;nbsp;머신러닝&amp;nbsp;시스템&amp;nbsp;설계를&amp;nbsp;읽었다. &lt;br /&gt;&lt;br /&gt;기존에&amp;nbsp;머신러닝&amp;nbsp;모델의&amp;nbsp;성능&amp;nbsp;향상이나&amp;nbsp;알고리즘&amp;nbsp;개선에만&amp;nbsp;초점을&amp;nbsp;맞췄다면,&amp;nbsp;이&amp;nbsp;책은&amp;nbsp;AI를&amp;nbsp;하나의&amp;nbsp;구성&amp;nbsp;요소로&amp;nbsp;삼아&amp;nbsp;어떻게&amp;nbsp;시스템을&amp;nbsp;설계할&amp;nbsp;것인가라는&amp;nbsp;관점에서&amp;nbsp;바라볼&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;해주었다.&amp;nbsp;단순한&amp;nbsp;모델&amp;nbsp;학습과&amp;nbsp;평가를&amp;nbsp;넘어,&amp;nbsp;데이터&amp;nbsp;수집부터&amp;nbsp;배포,&amp;nbsp;모니터링,&amp;nbsp;유지보수까지&amp;nbsp;머신러닝이&amp;nbsp;현실&amp;nbsp;세계에서&amp;nbsp;유의미하게&amp;nbsp;작동하기&amp;nbsp;위해&amp;nbsp;필요한&amp;nbsp;전&amp;nbsp;과정을&amp;nbsp;다룬다.&amp;nbsp;특히&amp;nbsp;AI&amp;nbsp;기술이&amp;nbsp;최종&amp;nbsp;사용자에게&amp;nbsp;가까이&amp;nbsp;다가온&amp;nbsp;최근&amp;nbsp;상황에서,&amp;nbsp;AI&amp;nbsp;시스템&amp;nbsp;설계자가&amp;nbsp;인간에게&amp;nbsp;미칠&amp;nbsp;영향까지&amp;nbsp;고려해야&amp;nbsp;할&amp;nbsp;측면들을&amp;nbsp;포괄적으로&amp;nbsp;제시한다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;책은&amp;nbsp;단순한&amp;nbsp;기술서를&amp;nbsp;넘어선다.&amp;nbsp;연구자에서&amp;nbsp;AI&amp;nbsp;시스템&amp;nbsp;설계자로의&amp;nbsp;전환을&amp;nbsp;고민하는&amp;nbsp;이들에게는&amp;nbsp;방향을&amp;nbsp;제시하는&amp;nbsp;안내서이자,&amp;nbsp;AI&amp;nbsp;기술이&amp;nbsp;실제&amp;nbsp;문제를&amp;nbsp;어떻게&amp;nbsp;해결할&amp;nbsp;수&amp;nbsp;있는지를&amp;nbsp;보여주는&amp;nbsp;실용적&amp;nbsp;로드맵이다.&amp;nbsp;나에게는&amp;nbsp;박사&amp;nbsp;이후&amp;nbsp;실전&amp;nbsp;프로젝트에&amp;nbsp;뛰어들면서&amp;nbsp;이론&amp;nbsp;중심에서&amp;nbsp;실전&amp;nbsp;중심으로&amp;nbsp;사고를&amp;nbsp;전환하는&amp;nbsp;데&amp;nbsp;중요한&amp;nbsp;토대가&amp;nbsp;되어주었다.&amp;nbsp;AI를&amp;nbsp;단일&amp;nbsp;기술이&amp;nbsp;아니라&amp;nbsp;현실과&amp;nbsp;맞물려&amp;nbsp;유기적으로&amp;nbsp;작동하는&amp;nbsp;시스템&amp;nbsp;전체로&amp;nbsp;이해하고&amp;nbsp;싶다면&amp;nbsp;반드시&amp;nbsp;읽어야&amp;nbsp;할&amp;nbsp;책이라&amp;nbsp;확신한다. &lt;br /&gt;&lt;br /&gt;작년부터 틈틈히 읽어오며, 중간 중간 풋노트의 링크도 따라가며 읽어오니 총 18시간이 걸렸다. 동네 전자도서관 대출로 빌려 읽음&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1527</guid>
      <comments>https://woongheelee.com/entry/%EC%B9%A9-%ED%9B%84%EC%98%8C-%EC%94%80-%EA%B9%80%EB%8C%80%EA%B7%BC-%EA%B9%80%EC%98%81%EB%AF%BC-%EB%B2%88%EC%97%AD-2023-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%84%A4%EA%B3%84-%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4#entry1527comment</comments>
      <pubDate>Tue, 10 Jun 2025 20:41:05 +0900</pubDate>
    </item>
    <item>
      <title>윈도우 11에서 프로그램 실행 단축키 설정하기</title>
      <link>https://woongheelee.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-11%EC%97%90%EC%84%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%8B%A4%ED%96%89-%EB%8B%A8%EC%B6%95%ED%82%A4-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;방법&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;실행하고자 하는 프로그램의 바로 가기를 만든다.&lt;/li&gt;
&lt;li&gt;만든 바로 가기를 우클릭 후 '속성'으로 간다.&lt;/li&gt;
&lt;li&gt;'바로 가기' 탭에서 '바로 가기 키(K)' 부분을 클릭 후 원하는 단축키를 누른다. (이때 &lt;code&gt;Ctrl + Alt + [키]&lt;/code&gt; 조합을 추천)&lt;/li&gt;
&lt;li&gt;'적용(A)' 후 단축키를 눌러서 설정이 잘 되었나 확인한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;터미널을 예로 들면,&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기본적으로 터미널은 &lt;code&gt;C:\Program Files\WindowsApps&lt;/code&gt; 경로 아래에 &lt;code&gt;wt.exe&lt;/code&gt;로 설치되어 있다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;탐색기를 열고 해당 경로로 가서 &lt;code&gt;wt.exe&lt;/code&gt;를 검색&lt;/li&gt;
&lt;li&gt;검색해서 나온 실행 파일을 우클릭 후 바로 가기를 만든다. (이 때, 폴더 권한 문제로 바탕화면에 바로가기가 만들어짐)&lt;/li&gt;
&lt;li&gt;바탕화면으로 간 후 만들어진 바로가기를 우클 한 다음 '속성(R)'으로 들어간다.&lt;/li&gt;
&lt;li&gt;'바로 가기' 탭을 선택한다.&lt;/li&gt;
&lt;li&gt;'바로 가기 키(K):' 옆의 입력 칸 ('없음' 상태일 것)을 클릭한다.&lt;/li&gt;
&lt;li&gt;키보드에서 &lt;code&gt;Ctrl&lt;/code&gt; 키와 &lt;code&gt;Alt&lt;/code&gt; 키를 누른 상태로 &lt;code&gt;T&lt;/code&gt; 키를 누른다. 입력 칸에 &lt;code&gt;Ctrl + Alt + T&lt;/code&gt; 라고 표시될 것이다. (다른 키 조합도 가능하지만, &lt;code&gt;Ctrl + Alt&lt;/code&gt; 또는 &lt;code&gt;Ctrl + Shift&lt;/code&gt; 조합을 추천)&lt;/li&gt;
&lt;li&gt;'적용(A)' 버튼을 누른다. (관리자 권한을 묻는 창이 뜨면 '계속'을 누른다.)&lt;/li&gt;
&lt;li&gt;'확인' 버튼을 눌러 창을 닫는다.&lt;/li&gt;
&lt;li&gt;이제 키보드에서 &lt;code&gt;Ctrl + Alt + T&lt;/code&gt; 를 눌러보면 터미널이 바로 실행될 것이다.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>소소한 일상. 다요리.</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1526</guid>
      <comments>https://woongheelee.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-11%EC%97%90%EC%84%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%8B%A4%ED%96%89-%EB%8B%A8%EC%B6%95%ED%82%A4-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0#entry1526comment</comments>
      <pubDate>Tue, 8 Apr 2025 23:38:31 +0900</pubDate>
    </item>
    <item>
      <title>Windows 환경에서 SSHFS로 원격 서버의 SQLite 연결</title>
      <link>https://woongheelee.com/entry/Windows-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-SSHFS%EB%A1%9C-%EC%9B%90%EA%B2%A9-%EC%84%9C%EB%B2%84%EC%9D%98-SQLite-%EC%97%B0%EA%B2%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SQLite3 같은 파일 기반 데이터베이스를 원격 서버에서 다뤄야 할 때, SSHFS를 이용하면 편리하다. 이번엔 터미널 명령어 없이 &lt;b&gt;Windows 탐색기&lt;/b&gt;만 사용해서 SSHFS로 원격 디렉토리를 마운트하는 방법을 정리해봤다. 특히 Python에서 SQLite를 바로 연결하는 방법까지도 함께 다뤘다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;필요한 준비물&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;WinFsp 설치&lt;/b&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/winfsp/winfsp/releases&quot;&gt;WinFsp 다운로드 페이지&lt;/a&gt;에서 최신 배포를 받아 설치한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SSHFS-Win 설치&lt;/b&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/winfsp/sshfs-win/releases&quot;&gt;SSHFS-Win GitHub 페이지&lt;/a&gt;에서 시스템 환경(x86 또는 x64)에 맞는 설치 파일을 다운로드해 설치한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;탐색기를 사용한 원격 서버 마운트&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;탐색기에서 네트워크 드라이브 연결 찾기&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;내 PC&lt;/b&gt;를 열고 탐색기 상단의 점 세 개 버튼을 클릭한다.&lt;/li&gt;
&lt;li&gt;메뉴에서 &lt;b&gt;네트워크 드라이브 연결&lt;/b&gt;을 선택한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;원격 서버 경로 입력&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원하는 드라이브 문자를 선택한다. (예: Z:)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;폴더&lt;/b&gt; 입력란에 아래 형식대로 경로를 입력한다:예를 들어:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;REMUSER&lt;/code&gt;: 원격 서버 사용자 이름 (예: &lt;code&gt;user&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HOST&lt;/code&gt;: 원격 서버 주소 (예: &lt;code&gt;192.168.1.100&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PORT&lt;/code&gt;: SSH 포트 (기본값: &lt;code&gt;22&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ABSOLUTE_PATH&lt;/code&gt;: 루트 경로 기준으로 마운트할 디렉토리 경로 (예: &lt;code&gt;/home/user/...&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\\sshfs.r\user@192.168.1.100!22\home\user\project\db&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\\sshfs.r\REMUSER@192.168.1.100!22\ABSOLUTE_PATH&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 인증&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;이 사용자로 연결&lt;/b&gt;을 체크하고 원격 서버의 사용자 이름과 비밀번호를 입력한다.&lt;/li&gt;
&lt;li&gt;자주 사용하는 환경이라면, Windows 자격 증명 관리자에 암호를 저장할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;연결 확인&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설정이 완료되면 &lt;b&gt;내 PC&lt;/b&gt;에 새로운 네트워크 드라이브로 표시된다.&lt;/li&gt;
&lt;li&gt;이제 이 드라이브를 로컬 디렉토리처럼 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Python에서 SQLite3로 원격 서버 데이터베이스 연결하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python으로 원격 서버의 SQLite 데이터베이스를 연결하려면, 먼저 SSHFS로 마운트된 경로를 사용하면 된다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import sqlite3

# 마운트된 드라이브 경로를 사용해 데이터베이스 파일 연결

db\_path = r&quot;Z:\\my.db&quot; # Z:는 네트워크 드라이브 문자  
conn = sqlite3.connect(db\_path)

# SQLite 명령 실행

cursor = conn.cursor()  
cursor.execute(&quot;SELECT * FROM example_table&quot;)  
rows = cursor.fetchall()  
for row in rows:  
print(row)

conn.close()&lt;/code&gt;&lt;/pre&gt;</description>
      <category>노트정리/파이썬 Python</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1525</guid>
      <comments>https://woongheelee.com/entry/Windows-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-SSHFS%EB%A1%9C-%EC%9B%90%EA%B2%A9-%EC%84%9C%EB%B2%84%EC%9D%98-SQLite-%EC%97%B0%EA%B2%B0#entry1525comment</comments>
      <pubDate>Fri, 3 Jan 2025 20:21:54 +0900</pubDate>
    </item>
    <item>
      <title>빔 튜토리얼 (vim tutorial)</title>
      <link>https://woongheelee.com/entry/%EB%B9%94-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-vim-tutorial</link>
      <description>&lt;h1&gt;Forever in Vim  &lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;티스토리 블로그의 마크다운이 완전하기 않기에 &lt;a href=&quot;https://github.com/WoongheeLee/forever-in-vim&quot;&gt;원본 깃허브 저장소&lt;/a&gt;가 보기 편함&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vim은 초보자는 명령어 때문에, 익숙한 사용자는 매력 때문에 빠져나가기가 어렵습니다.&lt;/p&gt;
&lt;p&gt;Vim의 세계로 들어왔다면 이제는 무한으로 즐겨보세요!&lt;/p&gt;
&lt;h2&gt;Vim에서 탈출하는 명령어&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:q&lt;/code&gt; - 저장 없이 종료&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:wq&lt;/code&gt; - 저장 후 종료&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:q!&lt;/code&gt; - 저장하지 않고 강제 종료&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;그래도 나가기 어려울 때는?&lt;/strong&gt; 그냥 &amp;quot;Ctrl+C&amp;quot; 후 &amp;quot;power off&amp;quot;를 누릅니다.  &lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;주요 Vim 명령어&lt;/h2&gt;
&lt;p&gt;Vim을 유용하게 사용할 수 있는 주요 명령어를 모았습니다.&lt;/p&gt;
&lt;h3&gt;1. 이동 명령어&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;code&gt;h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;왼쪽으로 한 칸 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;l&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;오른쪽으로 한 칸 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;j&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;아래로 한 줄 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;k&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;위로 한 줄 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;w&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;다음 단어로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;단어 끝으로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;이전 단어로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;파일의 맨 처음으로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;G&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;파일의 맨 끝으로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;화면의 절반 아래로 스크롤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+u&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;화면의 절반 위로 스크롤&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h3&gt;2. 텍스트 검색 및 치환&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/pattern&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pattern&lt;/code&gt; 문자열 검색&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;n&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;다음 검색 결과로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;N&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;이전 검색 결과로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:%s/old/new/g&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;파일 전체에서 &lt;code&gt;old&lt;/code&gt;를 &lt;code&gt;new&lt;/code&gt;로 치환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:%s/old/new/gc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;치환 전에 사용자 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h3&gt;3. 텍스트 삽입 및 삭제&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;커서 앞에 텍스트 삽입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;커서 뒤에 텍스트 삽입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;o&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;현재 줄 아래에 새로운 줄 삽입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;현재 줄 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dG&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;현재 줄부터 파일 끝까지 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;x&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;커서 위치의 문자 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h3&gt;4. 복사, 붙여넣기, 취소&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;code&gt;yy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;현재 줄 복사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;y$&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;현재 줄의 커서 이후만 복사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;복사한 내용 붙여넣기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;u&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;마지막 작업 취소 (undo)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+r&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;취소한 작업 복구 (redo)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h3&gt;5. 파일 저장 및 종료&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:w&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;파일 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:q&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vim 종료&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:wq&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;저장 후 종료&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:q!&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;저장하지 않고 강제 종료&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:x&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;저장 후 종료 (단축 명령)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h3&gt;6. 시각 모드&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;code&gt;v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;시각 모드 시작 (문자 단위 선택)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;V&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;시각 모드 시작 (줄 단위 선택)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;시각 모드 시작 (블록 단위 선택)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;y&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;선택한 영역 복사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;선택한 영역 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;선택한 영역 들여쓰기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;선택한 영역 내어쓰기&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h3&gt;7. 창 분할 및 탐색&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:split&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;수평 창 분할&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:vsplit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;수직 창 분할&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+w w&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;다음 창으로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+w q&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;현재 창 닫기&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h3&gt;8. 여러 줄 편집&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;code&gt;v&lt;/code&gt; + &lt;code&gt;선택&lt;/code&gt; + &lt;code&gt;:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;시각 모드로 영역을 선택한 후 명령어 실행 (&lt;code&gt;norm&lt;/code&gt; 명령어와 함께 사용 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+v&lt;/code&gt; + &lt;code&gt;I&lt;/code&gt; + &lt;code&gt;텍스트&lt;/code&gt; + &lt;code&gt;Esc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;블록 선택 후 여러 줄의 시작에 텍스트 삽입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+v&lt;/code&gt; + &lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;블록 선택 후 여러 줄의 텍스트 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:%norm i#&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;파일 전체의 각 줄 앞에 &lt;code&gt;#&lt;/code&gt; 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:%norm ^x&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;파일 전체에서 각 줄의 첫 글자 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h3&gt;예제 1: 여러 줄 주석 달기&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;주석을 달고 싶은 범위를 선택합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;방법 1&lt;/strong&gt;: &lt;code&gt;v&lt;/code&gt;를 눌러 문자 단위로 선택&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;방법 2&lt;/strong&gt;: &lt;code&gt;Ctrl+v&lt;/code&gt;를 눌러 블록 단위로 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;:&lt;/code&gt;을 입력한 뒤 아래 명령어를 실행합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;:norm i#&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;선택한 줄의 앞에 &lt;code&gt;#&lt;/code&gt;이 추가됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;예제 2: 여러 줄에서 첫 글자 삭제&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;삭제할 줄을 시각 모드(&lt;code&gt;v&lt;/code&gt; 또는 &lt;code&gt;Ctrl+v&lt;/code&gt;)로 선택합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;:&lt;/code&gt;을 입력한 뒤 아래 명령어를 실행합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;:norm ^x&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;선택한 줄의 첫 글자가 삭제됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;예제 3: 여러 줄 끝에 텍스트 추가&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;블록 모드(&lt;code&gt;Ctrl+v&lt;/code&gt;)로 여러 줄의 끝을 선택합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$&lt;/code&gt;를 눌러 커서를 줄 끝으로 이동한 뒤 원하는 텍스트를 입력합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Esc&lt;/code&gt;를 눌러 변경 사항을 적용합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;두 파일의 차이점(diff) 비교하기&lt;/h3&gt;
&lt;p&gt;Vim을 사용해 두 파일의 차이점을 비교하는 방법은 다음과 같습니다:&lt;/p&gt;
&lt;h4&gt;단계 1: 두 파일 열기&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;터미널에서 Vim을 실행하면서 두 파일을 입력합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;vim -d file1 file2&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;또는 Vim 내부에서 다음 명령어를 실행합니다:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;:vert diffsplit file2&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;현재 열려 있는 파일과 &lt;code&gt;file2&lt;/code&gt;의 차이점을 비교합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:split&lt;/code&gt;을 사용하면 수평 분할로 비교할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;단계 2: 차이점 탐색&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;]c&lt;/code&gt; : 다음 변경 사항으로 이동&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[c&lt;/code&gt; : 이전 변경 사항으로 이동&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;단계 3: 창 이동&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ctrl+w w&lt;/code&gt; : 다음 창으로 이동&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl+w h&lt;/code&gt; : 왼쪽 창으로 이동&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl+w l&lt;/code&gt; : 오른쪽 창으로 이동&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;단계 4: 수정 및 저장&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;차이점을 확인하면서 한쪽 파일을 수정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;수정 후 저장은 일반 Vim 명령어(&lt;code&gt;:w&lt;/code&gt;)를 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;단계 5: diff 모드 종료&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;비교를 마친 후에는 일반적으로 &lt;code&gt;:q&lt;/code&gt; 또는 &lt;code&gt;:qa&lt;/code&gt; 명령어로 Vim을 종료합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;.vimrc 기본 설정&lt;/h2&gt;
&lt;p&gt;아래는 &lt;a href=&quot;https://github.com/WoongheeLee/&quot;&gt;제가&lt;/a&gt; 자주 사용하는 &lt;code&gt;.vimrc&lt;/code&gt; 설정 파일입니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;set shiftwidth=4      &amp;quot; 들여쓰기 공백 너비를 4칸으로 설정
set tabstop=4         &amp;quot; 탭 키의 공백 너비를 4칸으로 설정
set ignorecase        &amp;quot; 검색 시 대소문자 구분 없음
set hlsearch          &amp;quot; 검색어를 하이라이트 표시
set background=dark   &amp;quot; 어두운 배경에 최적화된 색상 설정
set nocompatible      &amp;quot; 호환 모드 비활성화 (더 현대적인 Vim 기능 활성화)
set history=1000      &amp;quot; 명령어 히스토리를 1000개까지 저장
set ruler             &amp;quot; 상태 표시줄에 커서 위치 표시
set nobackup          &amp;quot; 백업 파일 생성하지 않음
set title             &amp;quot; 현재 편집 중인 파일 이름을 창 제목에 표시

set softtabstop=4     &amp;quot; 소프트 탭을 4칸으로 설정 (탭키 누르면 스페이스 키 네 번 눌린 효과)
set shiftwidth=4      &amp;quot; 들여쓰기 시 사용할 공백 너비를 4칸으로 설정
set smartindent       &amp;quot; 스마트 들여쓰기 설정
set nu                &amp;quot; 줄 번호 표시
set expandtab         &amp;quot; 탭 대신 공백을 삽입
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>노트정리/리눅스 linux</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1524</guid>
      <comments>https://woongheelee.com/entry/%EB%B9%94-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-vim-tutorial#entry1524comment</comments>
      <pubDate>Tue, 24 Dec 2024 23:53:48 +0900</pubDate>
    </item>
    <item>
      <title>git log에 자동으로 그래프 표시하기</title>
      <link>https://woongheelee.com/entry/git-log%EC%97%90-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EA%B7%B8%EB%9E%98%ED%94%84-%ED%91%9C%EC%8B%9C%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;Git에서 커밋 히스토리를 확인할 때, 브랜치 흐름을 시각화되어 있으면 보기 편하다. 이 때 사용 하는 것이 &lt;code&gt;--graph&lt;/code&gt; 옵션이다. 그런데 &lt;code&gt;git log&lt;/code&gt; 커맨드를 사용할 때 매번 &lt;code&gt;--graph&lt;/code&gt; 옵션을 넣어주면 불편하다. 이걸 자동화하는 방법은 아래와 같다.&lt;/p&gt;
&lt;p&gt;편집기로 &lt;code&gt;.bashrc&lt;/code&gt; 파일을 열고 하단에 아래 스크립트를 추가한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# git 명령어를 가로채서 처리할 함수를 정의
function git() {

    # $1은 첫 번째 인자. git 다음에 오는 명령어가 &amp;quot;log&amp;quot;인지 확인
    if [[ $1 == &amp;quot;log&amp;quot; ]]; then

        # shift는 첫 번째 인자(log)를 제거하고 나머지 인자들을 앞으로 당김
        shift

        # $*는 모든 옵션 인자들을 하나의 문자열로 합친 것
        # &amp;quot; $* &amp;quot;처럼 앞뒤로 공백을 넣어 정확한 옵션 매칭을 보장 (graphical 같은거랑 헷갈리면 안되니)
        # --graph 옵션이 없는지 확인
        if [[ ! &amp;quot; $* &amp;quot; =~ &amp;quot; --graph &amp;quot; ]]; then

            # --graph 옵션이 없으면 추가해서 실행
            # command는 함수가 아닌 실제 git 명령어를 실행
            # &amp;quot;$@&amp;quot;는 모든 인자들을 개별 인자로 전달
            command git log --graph &amp;quot;$@&amp;quot;
        else
            # --graph 옵션이 이미 있으면 그대로 실행
            command git log &amp;quot;$@&amp;quot;
        fi
    else
        # log 명령어가 아닌 경우 모든 인자를 그대로 전달
        command git &amp;quot;$@&amp;quot;
    fi
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;그런 후 터미널을 다시 열거나 &lt;code&gt;source ~/.bashrc&lt;/code&gt;등으로 변경 사항을 적용한다.&lt;/p&gt;</description>
      <category>노트정리/버전관리 version control</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1523</guid>
      <comments>https://woongheelee.com/entry/git-log%EC%97%90-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EA%B7%B8%EB%9E%98%ED%94%84-%ED%91%9C%EC%8B%9C%ED%95%98%EA%B8%B0#entry1523comment</comments>
      <pubDate>Sat, 21 Dec 2024 13:40:45 +0900</pubDate>
    </item>
    <item>
      <title>git clone 명령어가 멈추는 문제 해결법 두번째</title>
      <link>https://woongheelee.com/entry/git-clone-%EB%AA%85%EB%A0%B9%EC%96%B4%EA%B0%80-%EB%A9%88%EC%B6%94%EB%8A%94-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0%EB%B2%95-%EB%91%90%EB%B2%88%EC%A7%B8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우에서 &lt;b&gt;git clone 명령어가 멈추는 문제&lt;/b&gt; 때문에 최근 고통을 좀 받았다. 이럴 때는, HTTPS로 먼저 받고, 나중에 SSH로 전환하는 방식이 가장 간편하다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  &lt;b&gt;문제 상황&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;SSH로 git clone 명령어를 써서 저장소 받아오는 도중에 멈추는 현상 발생&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Receiving objects: xx%&lt;/b&gt; 에서 다운로드가 중단됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴 땐 &lt;b&gt;HTTPS로 클론한 후 SSH로 변경&lt;/b&gt;하는 게 빠르고 확실하다. 이 과정에서 알아야 할 몇 가지 중요한 개념과 설정이 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; ️ &lt;b&gt;해결 방법&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1️⃣ &lt;b&gt;HTTPS로 리포지토리 클론&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTPS로 먼저 리포지토리를 클론한다. SSH가 막혀있어도 HTTPS는 문제없이 작동한다.&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;# HTTPS로 리포지토리 클론
cd /d/git/1_project  # 작업할 디렉터리로 이동

git clone https://github.com/example-repo/sample-project.git&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면, &lt;b&gt;sample-project&lt;/b&gt; 디렉터리에 리포지토리가 클론된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2️⃣ &lt;b&gt;원격 URL을 SSH로 변경&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTPS로 받은 리포지토리의 원격 URL을 SSH로 변경한다. 이 작업을 통해 &lt;b&gt;다음부터는 SSH 키로 인증&lt;/b&gt;하게 된다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;# 원격 URL 확인 (현재는 HTTPS URL로 설정되어 있을 것)
cd sample-project

git remote -v&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 예시:&lt;/p&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;origin  https://github.com/example-repo/sample-project.git (fetch)
origin  https://github.com/example-repo/sample-project.git (push)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;원격 URL을 SSH로 변경&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;dsconfig&quot;&gt;&lt;code&gt;git remote set-url origin git@github.com:example-repo/sample-project.git&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 확인해보면, 이제 URL이 SSH로 바뀐 것을 볼 수 있다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;git remote -v&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 예시:&lt;/p&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;origin  git@github.com:example-repo/sample-project.git (fetch)
origin  git@github.com:example-repo/sample-project.git (push)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 &lt;b&gt;HTTPS에서 SSH로 전환 완료&lt;/b&gt;다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3️⃣ &lt;b&gt;SSH 에이전트에 SSH 키 추가&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH 키를 &lt;b&gt;에이전트에 추가&lt;/b&gt;해야 한다. 그래야 &lt;b&gt;git push, git pull&lt;/b&gt; 명령이 SSH 키를 자동으로 사용할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# SSH 에이전트 시작
eval &quot;$(ssh-agent -s)&quot;

# SSH 키 추가
ssh-add ~/.ssh/id_ed25519&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SSH 연결 테스트&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;ssh -T git@github.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 예시:&lt;/p&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;Hi User! You've successfully authenticated, but GitHub does not provide shell access.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 메시지가 보이면, SSH 인증이 성공한 것이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⚠️ &lt;b&gt;주의사항&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Credential Manager의 HTTPS 자격 증명 삭제&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows의 &lt;b&gt;자격 증명 관리자(Credential Manager)&lt;/b&gt;에 &lt;b&gt;github.com 자격 증명&lt;/b&gt;이 저장되어 있다면, 매번 비밀번호 입력 없이 HTTPS로 클론할 수 있다.&lt;/li&gt;
&lt;li&gt;이 경우, &lt;code&gt;Credential Manager&lt;/code&gt;에 저장된 자격 증명을 삭제해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SSH 키가 GitHub에 등록되어 있는지 확인&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GitHub의 &lt;b&gt;Settings &amp;gt; SSH and GPG keys&lt;/b&gt; 페이지에서, &lt;b&gt;id_ed25519.pub(또는 id_rsa.pub 등 키 생성 방식에 따라 선택)&lt;/b&gt;의 내용을 복사하여 등록해야 한다.&lt;/li&gt;
&lt;li&gt;등록하지 않으면 &lt;b&gt;Permission denied (publickey)&lt;/b&gt; 에러가 발생할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  &lt;b&gt;명령어 요약&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;dsconfig&quot;&gt;&lt;code&gt;# 1️⃣ HTTPS로 리포지토리 클론
git clone https://github.com/example-repo/sample-project.git

# 2️⃣ 원격 URL을 SSH로 변경
git remote set-url origin git@github.com:example-repo/sample-project.git

# 3️⃣ SSH 에이전트에 SSH 키 추가
eval &quot;$(ssh-agent -s)&quot;
ssh-add ~/.ssh/id_ed25519

# 4️⃣ SSH 연결 테스트
ssh -T git@github.com&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  &lt;b&gt;결론&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;HTTPS로 먼저 클론하고, SSH로 전환하는 방식이 가장 간단하고 확실하다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;SSH로 클론이 안 될 때는 당황하지 말고, &lt;b&gt;HTTPS로 받아서 SSH로 전환&lt;/b&gt;하면 된다.&lt;/li&gt;
&lt;li&gt;이 과정이 끝나면, &lt;b&gt;더 이상 비밀번호를 입력하지 않아도 된다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 &lt;b&gt;git clone, git push, git pull&lt;/b&gt; 명령어가 &lt;b&gt;SSH로 자동 인증&lt;/b&gt;될 것이다.  &lt;/p&gt;</description>
      <category>노트정리/버전관리 version control</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1522</guid>
      <comments>https://woongheelee.com/entry/git-clone-%EB%AA%85%EB%A0%B9%EC%96%B4%EA%B0%80-%EB%A9%88%EC%B6%94%EB%8A%94-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0%EB%B2%95-%EB%91%90%EB%B2%88%EC%A7%B8#entry1522comment</comments>
      <pubDate>Sun, 15 Dec 2024 19:04:11 +0900</pubDate>
    </item>
    <item>
      <title>리눅스에서 아나콘다 (anaconda) 무료 라이선스 (license) 자동 설치 스크립트</title>
      <link>https://woongheelee.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4%EC%97%90%EC%84%9C-%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4-anaconda-%EB%AC%B4%EB%A3%8C-%EB%9D%BC%EC%9D%B4%EC%84%A0%EC%8A%A4-license-%EC%9E%90%EB%8F%99-%EC%84%A4%EC%B9%98-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;신규 서버가 여러 대 한꺼번에 들어올 때, 매번 미니콘다 설치 스크립트를 다운로드하고 자잘한 설정을 해주는 과정이 번거로울 수 있다. 이를 자동화하기 위해 미니콘다 설치 스크립트를 제작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 스크립트의 주요 기능은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 미니콘다(Miniconda) 설치 자동화&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. conda-forge 채널 설정으로 라이선스 문제 해결&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/d244c5fb5394e5abd969a996b8c5923e.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 스크립트는 설치하는 동안 추가 입력 없이 자동으로 실행되도록 설계되었다. 다만, 향후 보안을 강화하기 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;다운로드한 설치 스크립트의 체크섬(Checksum) 검증 기능&lt;/b&gt;을 추가할 계획이다. 이를 커맨드 라인 인자로 받을 수 있도록 하면, 유연성과 보안성을 모두 확보할 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>노트정리/파이썬 Python</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1521</guid>
      <comments>https://woongheelee.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4%EC%97%90%EC%84%9C-%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4-anaconda-%EB%AC%B4%EB%A3%8C-%EB%9D%BC%EC%9D%B4%EC%84%A0%EC%8A%A4-license-%EC%9E%90%EB%8F%99-%EC%84%A4%EC%B9%98-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8#entry1521comment</comments>
      <pubDate>Mon, 9 Dec 2024 23:41:19 +0900</pubDate>
    </item>
    <item>
      <title>WSL2에서 접속할 때, SSH 서버 자동 시작 설정하기</title>
      <link>https://woongheelee.com/entry/WSL2%EC%97%90%EC%84%9C-%EC%A0%91%EC%86%8D%ED%95%A0-%EB%95%8C-SSH-%EC%84%9C%EB%B2%84-%EC%9E%90%EB%8F%99-%EC%8B%9C%EC%9E%91-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;WSL2(Windows Subsystem for Linux)는 윈도우 환경에서 리눅스를 가볍게 사용할 수 있도록 설계된 기능이다. 하지만 기본적으로 WSL2는 SSH 서버를 자동으로 실행하지 않기 때문에 접속할 때마다 서버를 수동으로 실행해야 하는 번거로움이 있다.&lt;/p&gt;
&lt;p&gt;특히, SSH 서버가 꺼져 있을 경우 접속 시 자동으로 서버를 시작하고, 암호 입력 없이 사용할 수 있도록 설정하려면 다음 단계를 따르면 된다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;WSL2에서 SSH 서버 자동 시작 설정&lt;/h2&gt;
&lt;h3&gt;1. &lt;strong&gt;SSH 서버 설치&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;WSL2에 SSH 서버가 설치되어 있는지 확인한다. 설치되어 있지 않다면, 다음 명령어로 설치한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt update
sudo apt install openssh-server&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;설치 후 SSH 서버를 수동으로 실행하고 상태를 확인한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo service ssh start
sudo service ssh status&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;2. &lt;strong&gt;sudo 암호 입력 없이 SSH 명령 실행 허용&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;SSH 서버를 자동으로 실행하려면, &lt;code&gt;sudo&lt;/code&gt; 명령을 사용할 때 암호를 입력하지 않도록 설정해야 한다. 이를 위해 &lt;code&gt;sudoers&lt;/code&gt; 파일을 수정한다.&lt;/p&gt;
&lt;p&gt;참고로 시스템의 기본 편집기를 바꾸고 싶다면 (예를 들어 &lt;code&gt;nano&lt;/code&gt;에서 &lt;code&gt;vi&lt;/code&gt;으로) 아래 명령어를 실행하고, 사용하고자 하는 편집기를 고르면 된다. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo update-alternatives --config editor&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;visudo&lt;/code&gt; 명령으로 &lt;code&gt;sudoers&lt;/code&gt; 파일을 연다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo visudo&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;파일 하단에 다음 줄을 추가한다. &lt;code&gt;your_username&lt;/code&gt;을 실제 WSL 사용자 이름으로 바꾼다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;your_username ALL=(ALL) NOPASSWD: /usr/sbin/service ssh start, /usr/sbin/service ssh status&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;저장하고 편집기를 종료한다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이 설정으로 &lt;code&gt;sudo service ssh start&lt;/code&gt;와 &lt;code&gt;sudo service ssh status&lt;/code&gt; 명령어를 암호 없이 실행할 수 있게 된다.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;3. &lt;strong&gt;SSH 서버 상태 확인 및 자동 실행 설정&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;SSH 서버가 이미 실행 중이라면 중복 실행을 방지하기 위해 상태를 확인한 후 실행하는 조건문을 &lt;code&gt;.bashrc&lt;/code&gt; 파일에 추가한다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;.bashrc&lt;/code&gt; 파일을 열어 수정한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;vim ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;다음 스크립트를 추가한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# SSH 서버 상태를 확인하고, 실행 중이 아니면 시작
if ! sudo /usr/sbin/service ssh status | grep -q &amp;quot;is running&amp;quot;; then
    sudo /usr/sbin/service ssh start &amp;gt; /dev/null 2&amp;gt;&amp;amp;1
fi&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo /usr/sbin/service ssh status | grep -q &amp;quot;is running&amp;quot;&lt;/code&gt;: SSH 서버가 실행 중인지 확인한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo /usr/sbin/service ssh start&lt;/code&gt;: 서버가 실행 중이 아니면 시작한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;/code&gt;: 출력 메시지를 숨긴다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;파일을 저장하고 종료한다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;4. &lt;strong&gt;설정 적용 및 테스트&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;설정을 적용하려면 새 터미널을 열거나 WSL을 다시 시작한다. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;wsl -d my_ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이제 접속 시 SSH 서버가 자동으로 실행되며, 실행 중일 경우 불필요한 작업이 수행되지 않는다.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;결론&lt;/h3&gt;
&lt;p&gt;위 설정을 통해 접속할 때마다 SSH 서버가 자동으로 실행되도록 하고, &lt;code&gt;sudo&lt;/code&gt; 명령어에 암호를 입력하지 않아도 되도록 설정할 수 있다. 이 방법은 WSL2 환경을 효율적이고 편리하게 사용할 수 있도록 해준다.&lt;/p&gt;</description>
      <category>노트정리/리눅스 linux</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1519</guid>
      <comments>https://woongheelee.com/entry/WSL2%EC%97%90%EC%84%9C-%EC%A0%91%EC%86%8D%ED%95%A0-%EB%95%8C-SSH-%EC%84%9C%EB%B2%84-%EC%9E%90%EB%8F%99-%EC%8B%9C%EC%9E%91-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0#entry1519comment</comments>
      <pubDate>Tue, 3 Dec 2024 23:04:27 +0900</pubDate>
    </item>
    <item>
      <title>허깅페이스 모델의 소스 코드 확인하기</title>
      <link>https://woongheelee.com/entry/%ED%97%88%EA%B9%85%ED%8E%98%EC%9D%B4%EC%8A%A4-%EB%AA%A8%EB%8D%B8%EC%9D%98-%EC%86%8C%EC%8A%A4-%EC%BD%94%EB%93%9C-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;요새 허깅페이스 모델을 자주 사용하는데, 모델의 클래스 코드를 직접 확인해야 할 때가 있다. 모델 코드가 GitHub에 공개되어 있다면 좋겠지만, 그렇지 않은 경우도 종종 있다.&lt;/p&gt;
&lt;p&gt;특히 &lt;code&gt;transformers&lt;/code&gt;의 &lt;code&gt;AutoModel&lt;/code&gt;을 이용해 NVIDIA의 임베딩 모델을 생성한다고 가정해 보자. 이 경우, 필요한 코드를 허깅페이스 모델 허브에서 자동으로 다운로드해서 사용하게 된다. 이를 위해 &lt;code&gt;trust_remote_code=True&lt;/code&gt; 옵션을 사용한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from transformers import AutoModel

model = AutoModel.from_pretrained(&amp;#39;nvidia/NV-Embed-v2&amp;#39;, trust_remote_code=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이런 상황에서 모델 소스 코드의 원본 파일 경로를 간단히 확인할 수 있다. 파이썬의 &lt;code&gt;inspect&lt;/code&gt; 모듈을 사용하면 다음과 같이 경로를 알아내서, 이를 &lt;code&gt;VS Code&lt;/code&gt;와 같은 편집기에서 열어볼 수 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import inspect 

print(inspect.getfile(model.__class__))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위 코드의 결과로 출력된 파일 경로를 편집기에 입력하면 해당 클래스의 소스 코드를 확인할 수 있다. &lt;/p&gt;
&lt;p&gt;이 방법은 &lt;code&gt;trust_remote_code=True&lt;/code&gt; 옵션으로 다운로드한 코드뿐만 아니라, 로컬에 설치된 Python 패키지의 소스 코드 경로를 확인할 때도 유용하다.  &lt;/p&gt;</description>
      <category>노트정리/파이썬 Python</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1520</guid>
      <comments>https://woongheelee.com/entry/%ED%97%88%EA%B9%85%ED%8E%98%EC%9D%B4%EC%8A%A4-%EB%AA%A8%EB%8D%B8%EC%9D%98-%EC%86%8C%EC%8A%A4-%EC%BD%94%EB%93%9C-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0#entry1520comment</comments>
      <pubDate>Tue, 3 Dec 2024 21:47:37 +0900</pubDate>
    </item>
    <item>
      <title>WSL2에 우분투 설치하기 (Tarball 파일 사용)</title>
      <link>https://woongheelee.com/entry/WSL2%EC%97%90-%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-Tarball-%ED%8C%8C%EC%9D%BC-%EC%82%AC%EC%9A%A9</link>
      <description>&lt;h1&gt;WSL2에 우분투 설치하기 (Tarball 파일 사용)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우 11부터는 WSL2 (Windows Subsystem for Linux)가 기본으로 탑재되어 있어, 굳이 가상화 머신을 설치하지 않고도 쉽게 리눅스를 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히, WSL을 사용할 때 우분투를 사용하는 가장 쉬운 방법은 명령어로 설치하거나 마이크로소프트 스토어(Microsoft Store)에서 다운로드하여 사용하는 것이다. 또한, &lt;code&gt;wsl --list --online&lt;/code&gt; 명령어를 사용하여 사용 가능한 배포판을 선택하고 설치할 수 있다. 그러나 사내 보안 정책 등으로 이러한 설치 방법이 제한된다면, tarball 파일을 직접 다운로드하여 설치하는 방법이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 Tarball 파일 설치 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;b&gt;Ubuntu Cloud 이미지 다운로드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투를 설치하려면, 아래 링크로 접속하여 원하는 버전의 tarball 파일을 다운로드한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;우분투 이미지 다운로드 링크: &lt;a href=&quot;https://cloud-images.ubuntu.com/&quot;&gt;Ubuntu Cloud Images&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 &lt;code&gt;Focal Fossa&lt;/code&gt; (Ubuntu 20.04 LTS)를 설치하려면, 해당 디렉토리에서 아래 파일을 다운로드한다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;focal-server-cloudimg-amd64-root.tar.xz  2024-11-27 22:15  375M  Ubuntu Server 20.04 LTS (Focal Fossa) daily builds&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;b&gt;WSL에 우분투 설치하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드한 tarball 파일을 WSL에 설치하려면 &lt;code&gt;wsl --import&lt;/code&gt; 명령어를 사용한다. 예를 들어, &lt;code&gt;C:\Downloads\focal-server-cloudimg-amd64-root.tar.xz&lt;/code&gt;에 다운로드한 파일을 &lt;code&gt;C:\WSL\FocalServer\&lt;/code&gt; 디렉토리에 설치하려면 아래 명령어를 실행한다.&lt;/p&gt;
&lt;pre class=&quot;taggerscript&quot;&gt;&lt;code&gt;wsl --import focal-server C:\WSL\FocalServer C:\Downloads\focal-server-cloudimg-amd64-root.tar.xz&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;focal-server&lt;/code&gt;는 설치할 배포판의 이름이다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C:\WSL\FocalServer&lt;/code&gt;는 WSL에서 사용할 디렉토리 경로이다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C:\Downloads\focal-server-cloudimg-amd64-root.tar.xz&lt;/code&gt;는 다운로드한 tarball 파일의 경로이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;디렉토리 생성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어를 실행하기 전에 &lt;code&gt;C:\WSL\FocalServer&lt;/code&gt; 디렉토리를 먼저 만들어 두어야 한다. 디렉토리가 없으면 설치가 제대로 진행되지 않으므로, 해당 디렉토리를 먼저 생성해 두어야 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;설치 완료 후 WSL 시작&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되면, &lt;code&gt;wsl -d focal-server&lt;/code&gt; 명령어를 사용하여 우분투를 실행할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;axapta&quot;&gt;&lt;code&gt;wsl -d focal-server&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제, WSL2에서 우분투 환경을 사용할 수 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법은 명령어로 배포판을 설치할 수 없거나, 보안 정책으로 스토어를 사용할 수 없는 경우 유용하게 사용할 수 있다.&lt;/p&gt;</description>
      <category>노트정리/리눅스 linux</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1518</guid>
      <comments>https://woongheelee.com/entry/WSL2%EC%97%90-%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-Tarball-%ED%8C%8C%EC%9D%BC-%EC%82%AC%EC%9A%A9#entry1518comment</comments>
      <pubDate>Mon, 2 Dec 2024 23:24:11 +0900</pubDate>
    </item>
    <item>
      <title>옵시디언(obsidian)과 유사한 제틀러(zettlr)</title>
      <link>https://woongheelee.com/entry/%EC%98%B5%EC%8B%9C%EB%94%94%EC%96%B8obsidian%EA%B3%BC-%EC%9C%A0%EC%82%AC%ED%95%9C-%EC%A0%9C%ED%8B%80%EB%9F%ACzettlr</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기존에는 메모를 txt 파일로 정리해 깃허브에 관리했다. 그런데 최근에 커맨드스페이스의 구요한 대표님께 옵시디언(Obsidian) 사용법을 배우고, 메모 관리를 옵시디언으로 옮기려 했다. 옵시디언은 개인이 쓰면 무료지만, 기업에서 사용하려면 라이선스 비용을 지불해야 했다. 연간 사용료가 50달러(USD)였는데, 이 비용도 아까워서 무료 대안을 찾기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃허브에서 스타 개수를 기준으로 살펴보니 Joplin, Logseq, Zettlr 같은 무료 소프트웨어들이 있었다. 그중 기존 디렉터리 구조를 그대로 활용할 수 있는 도구로 &lt;b&gt;제틀러(Zettlr)&lt;/b&gt; 를 선택했다. 제틀러는 인덱싱 과정을 거치지 않아 검색 속도는 느렸지만, 인덱싱 파일을 따로 생성하지 않고 현재 디렉터리 그대로 작업할 수 있다는 장점이 있다.&lt;/p&gt;</description>
      <category>소소한 일상. 다요리.</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1517</guid>
      <comments>https://woongheelee.com/entry/%EC%98%B5%EC%8B%9C%EB%94%94%EC%96%B8obsidian%EA%B3%BC-%EC%9C%A0%EC%82%AC%ED%95%9C-%EC%A0%9C%ED%8B%80%EB%9F%ACzettlr#entry1517comment</comments>
      <pubDate>Wed, 30 Oct 2024 23:13:05 +0900</pubDate>
    </item>
    <item>
      <title>윈도우 11에서 탐색기의 원드라이브(OneDrive) 삭제</title>
      <link>https://woongheelee.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-11%EC%97%90%EC%84%9C-%ED%83%90%EC%83%89%EA%B8%B0%EC%9D%98-%EC%9B%90%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B8%8COneDrive-%EC%82%AD%EC%A0%9C</link>
      <description>&lt;p&gt;윈도우 11 탐색기를 열어보면 당황스럽게도 홈, 갤러리 그리고 원드라이브가 네비게이션 최상단에 나타나고 이걸 쉽게 지울수도 없다. 윈도우 &lt;strong&gt;실행 (&lt;code&gt;Win + R&lt;/code&gt;)&lt;/strong&gt; 으로 레지스트리 편집기를 열어서 직접 지워도 되지만 그건 너무 귀찮기 때문에 한 방에 지울 수 있는 레지스트리 파일을 만들어보았다. 홈과 갤러리를 지울 수 있는 레지스트리 파일은 인터넷을 뒤지면 쉽게 나오지만, 원드라이브는 안보여서 원드라이브 삭제 파일만 만들었다.&lt;/p&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/1e92b66811caafa078995811c0236e1b.js&quot;&gt;&lt;/script&gt;</description>
      <category>소소한 일상. 다요리.</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1516</guid>
      <comments>https://woongheelee.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-11%EC%97%90%EC%84%9C-%ED%83%90%EC%83%89%EA%B8%B0%EC%9D%98-%EC%9B%90%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B8%8COneDrive-%EC%82%AD%EC%A0%9C#entry1516comment</comments>
      <pubDate>Tue, 29 Oct 2024 20:25:07 +0900</pubDate>
    </item>
    <item>
      <title>윈도우에서 git clone 명령어가 멈출 때 해결법</title>
      <link>https://woongheelee.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0%EC%97%90%EC%84%9C-git-clone-%EB%AA%85%EB%A0%B9%EC%96%B4%EA%B0%80-%EB%A9%88%EC%B6%9C-%EB%95%8C-%ED%95%B4%EA%B2%B0%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;최근 새로운 윈도우 랩탑이 생겨서 개발 환경 설정을 완료하였다. &lt;code&gt;Git Bash&lt;/code&gt;도 설정해서 사용하는데, 내 윈도우 ssh 키를 깃 계정에 설정하고 난 후에 아무리 용량이 작은 저장소도 &lt;code&gt;git clone&lt;/code&gt;이 안되는 것이다. 예를 들어 &lt;code&gt;git clone &amp;lt;저장소 주소&amp;gt;&lt;/code&gt;를 실행하면 특정 과정에서 멈추는 현상이 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;추측하는 문제 원인은 윈도우 자격 증명 관리자(credential manager)에서 자격 증명을 전부 비교하느라 시간이 오래 걸린다는 것이다. 시간이 오래 걸린다기보다는 그냥 멈춘 것으로 봤는데. 아무튼 해결법은 아래 명령어로 자격 증명을 덮어씌우는 것이다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;git config --global credential.provider generic&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;참고
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/68119535/git-clone-hangs-on-cloning-into-using-gitbash&quot;&gt;https://stackoverflow.com/questions/68119535/git-clone-hangs-on-cloning-into-using-gitbash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/git-ecosystem/git-credential-manager/issues/364&quot;&gt;https://github.com/git-ecosystem/git-credential-manager/issues/364&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>노트정리/버전관리 version control</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1515</guid>
      <comments>https://woongheelee.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0%EC%97%90%EC%84%9C-git-clone-%EB%AA%85%EB%A0%B9%EC%96%B4%EA%B0%80-%EB%A9%88%EC%B6%9C-%EB%95%8C-%ED%95%B4%EA%B2%B0%EB%B2%95#entry1515comment</comments>
      <pubDate>Fri, 25 Oct 2024 17:42:12 +0900</pubDate>
    </item>
    <item>
      <title>파이썬(python)에서 엑셀 (excel) 수식 계산 정밀도 보존 방법</title>
      <link>https://woongheelee.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%ACpython%EC%97%90%EC%84%9C-%EC%97%91%EC%85%80-excel-%EC%88%98%EC%8B%9D-%EA%B3%84%EC%82%B0-%EC%A0%95%EB%B0%80%EB%8F%84-%EB%B3%B4%EC%A1%B4-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p&gt;파이썬은 직관적이고 구현이 쉬운 언어로, 많은 데이터 처리 및 자동화 작업에서 널리 사용한다. 그러나 &lt;strong&gt;정밀 계산&lt;/strong&gt;에서 파이썬을 사용할 때는 주의가 필요하다. 수치가 너무 크거나 작을 때 계산 정확도가 떨어질 수 있기 때문이다. 특히, &lt;strong&gt;엑셀에 기록된 실험 데이터&lt;/strong&gt;나 대규모 연산이 필요한 경우에는 계산 결과가 왜곡될 가능성이 있다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;최근 &lt;strong&gt;파이썬으로 실험 데이터 처리 자동화&lt;/strong&gt;를 구현하던 중 문제를 겪었다. 예를 들어, &lt;code&gt;1E18 ** 2&lt;/code&gt;와 같은 대규모 수를 제곱할 때, 결과가 크게 어긋나 &lt;strong&gt;정확한 계산&lt;/strong&gt;이 어려웠다. 이와 같은 문제는 &lt;strong&gt;부동소수점 연산&lt;/strong&gt;에서 발생하는 일반적인 한계에서 비롯된 것이다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;이러한 이유로 &lt;strong&gt;엑셀에 구현된 수식&lt;/strong&gt;이 더 신뢰성 있게 동작할 수 있다. 엑셀은 내부적으로 &lt;strong&gt;고정 소수점 연산&lt;/strong&gt;을 사용하며, 특정 계산 작업에서는 파이썬보다 더 정확한 결과를 제공한다. 엑셀의 수식을 그대로 활용하면 계산 오차를 줄일 수 있고, 엑셀 파일에 저장된 데이터를 파이썬으로 불러와 처리하면 &lt;strong&gt;자동화와 정확성&lt;/strong&gt;을 동시에 잡을 수 있다. 이를 위해 &lt;code&gt;openpyxl&lt;/code&gt;을 이용하면 된다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;아래는 예제를 통해서 엑셀에 있는 수식을 파이썬으로 불러오고, 계산 정확도를 보존하며, 데이터 처리 자동화를 구현할 수 있다. 여기서 주목할 점은 &lt;code&gt;data_only=True&lt;/code&gt;를 사용한다는 점이다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from openpyxl import load_workbook

# 엑셀 파일 불러오기
workbook = load_workbook(filename=&amp;#39;data.xlsx&amp;#39;, data_only=True)
sheet = workbook.active

# 특정 셀의 계산된 값 가져오기
cell_value = sheet[&amp;#39;B2&amp;#39;].value
print(f&amp;quot;엑셀에서 계산된 값: {cell_value}&amp;quot;)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>노트정리/파이썬 Python</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1514</guid>
      <comments>https://woongheelee.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%ACpython%EC%97%90%EC%84%9C-%EC%97%91%EC%85%80-excel-%EC%88%98%EC%8B%9D-%EA%B3%84%EC%82%B0-%EC%A0%95%EB%B0%80%EB%8F%84-%EB%B3%B4%EC%A1%B4-%EB%B0%A9%EB%B2%95#entry1514comment</comments>
      <pubDate>Sat, 19 Oct 2024 15:00:35 +0900</pubDate>
    </item>
    <item>
      <title>포트리 키링 에러 (poetry keyring error)</title>
      <link>https://woongheelee.com/entry/%ED%8F%AC%ED%8A%B8%EB%A6%AC-%ED%82%A4%EB%A7%81-%EC%97%90%EB%9F%AC-poetry-keyring-error</link>
      <description>&lt;ul&gt;
&lt;li&gt;poetry install이 멈춘 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;poetry install -vvv&lt;/code&gt; 명령어로 환경을 설치하려고 보면 디버그 단계로 자세한 설치 상황을 모니터링 할 수 있다. 그러면 아래와 같은 화면에서 멈추는 일이 보인다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Checking if keyring is available \[keyring:keyring.backend\] Loading KWallet \[keyring:keyring.backend\] Loading SecretService \[keyring:keyring.backend\] Loading Windows \[keyring:keyring.backend\] Loading chainer \[keyring:keyring.backend\] Loading libsecret \[keyring:keyring.backend\] Loading macOS Using keyring backend &amp;#39;SecretService Keyring&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;임시방편으로 &lt;code&gt;export PYTHON\_KEYRING\_BACKEND=keyring.backends.null.Keyring&lt;/code&gt; 으로 키링 비활성화 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/python-poetry/poetry/issues/8623&quot;&gt;&lt;em&gt;https://github.com/python-poetry/poetry/issues/8623&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;이러든 저러든 내 컴퓨터 사용 환경에서 방화벽이 poetry 사용을 막고 있다면 콘다나 쓰는게 좋다.&lt;/p&gt;</description>
      <category>노트정리/버전관리 version control</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1513</guid>
      <comments>https://woongheelee.com/entry/%ED%8F%AC%ED%8A%B8%EB%A6%AC-%ED%82%A4%EB%A7%81-%EC%97%90%EB%9F%AC-poetry-keyring-error#entry1513comment</comments>
      <pubDate>Sat, 19 Oct 2024 14:46:33 +0900</pubDate>
    </item>
    <item>
      <title>허깅페이스 (huggingface) 모델 다운로드 받기</title>
      <link>https://woongheelee.com/entry/%ED%97%88%EA%B9%85%ED%8E%98%EC%9D%B4%EC%8A%A4-huggingface-%EB%AA%A8%EB%8D%B8-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%9B%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;from_pretrained로 모델 체크포인트 다운이 안되어 이유를 파악해 보니 사내 정책 때문에 포트가 막혀있기 때문이었다. 이런 경우 단순하게 https로 다운 받으면 된다.&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;git lfs install
git clone &amp;lt;https://huggingface.co/&amp;gt;&amp;lt;모델-주소&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한편, 다운 받은 모델을 from_pretrained로 불러올 때, 다음과 같은 식으로 모델을 불러오면 안정적인 로딩이 가능하다.&lt;/p&gt;
&lt;pre class=&quot;nix&quot;&gt;&lt;code&gt;from diffusers import DiffusionPipeline, AutoencoderKL, FluxTransformer2DModel
from transformers import CLIPTokenizer, T5TokenizerFast, CLIPTextModel, T5EncoderModel

# Load individual components
tokenizer = CLIPTokenizer.from_pretrained(&quot;./FLUX.1-schnell/tokenizer&quot;)
tokenizer_2 = T5TokenizerFast.from_pretrained(&quot;./FLUX.1-schnell/tokenizer_2&quot;)
text_encoder = CLIPTextModel.from_pretrained(&quot;./FLUX.1-schnell/text_encoder&quot;)
text_encoder_2 = T5EncoderModel.from_pretrained(&quot;./FLUX.1-schnell/text_encoder_2&quot;)

# Load the VAE and transformer
vae = AutoencoderKL.from_pretrained(&quot;./FLUX.1-schnell/vae&quot;)
transformer = FluxTransformer2DModel.from_pretrained(&quot;./FLUX.1-schnell/transformer&quot;)

# Now load the pipeline with the pre-loaded components
pipeline = DiffusionPipeline.from_pretrained(
    &quot;./FLUX.1-schnell&quot;,
    text_encoder=text_encoder,
    text_encoder_2=text_encoder_2,
    tokenizer=tokenizer,
    tokenizer_2=tokenizer_2,
    transformer=transformer,
    vae=vae
)

&lt;/code&gt;&lt;/pre&gt;</description>
      <category>노트정리/머신러닝 machine leanring</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1512</guid>
      <comments>https://woongheelee.com/entry/%ED%97%88%EA%B9%85%ED%8E%98%EC%9D%B4%EC%8A%A4-huggingface-%EB%AA%A8%EB%8D%B8-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%9B%EA%B8%B0#entry1512comment</comments>
      <pubDate>Sat, 19 Oct 2024 14:43:00 +0900</pubDate>
    </item>
    <item>
      <title>윈도우에서 터미널 설정</title>
      <link>https://woongheelee.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0%EC%97%90%EC%84%9C-%ED%84%B0%EB%AF%B8%EB%84%90-%EC%84%A4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;한동안 윈도우에서 명령줄 인터페이스(CLI, command-line interface)로 Git Bash를 사용해 왔다. Git Bash는 익숙하고 편리하지만, 이전 글(&lt;a href=&quot;https://woongheelee.com/entry/%EC%89%98bash-shell%EC%97%90%EC%84%9C-%EA%B7%80%EC%97%AC%EC%9A%B4-%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0&quot;&gt;&lt;b&gt;쉘(bash shell)에서 귀여운 이모티콘 사용하기&lt;/b&gt;&lt;/a&gt;)에서 언급한 귀여운 이모티콘을 제대로 표시할 수 없는 점이 아쉬웠다. 그러던 중 WSL(Windows Subsystem for Linux)을 알아보다가 윈도우 터미널(Windows Terminal)이 크게 개선된 것을 발견했고, 이를 사용하기로 결정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우 터미널은 깃허브 저장소(&lt;a href=&quot;https://github.com/microsoft/terminal&quot;&gt;https://github.com/microsoft/terminal)에서&lt;/a&gt;%EC%97%90%EC%84%9C) 받을 수 있다. Releases 탭으로 가서 &lt;code&gt;msixbundle&lt;/code&gt; 확장자로 끝나는 파일을 다운로드한 후 설치하면 된다(참고로, 윈도우 11의 최근 버전에서는 윈도우 터미널이 기본으로 내장되어 있다).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스에서 작업하던 방식대로 사용하려면 윈도우 터미널에서 제공하는 기본 Ubuntu 환경을 사용할 수 있다. 하지만 나는 기존에 사용하던 Git Bash를 추가 설정해서 사용하기로 했다. 설정 방법은 간단하다. 윈도우 터미널에서 &lt;code&gt;Ctrl + ,&lt;/code&gt;를 눌러 설정 화면을 연 후, Git Bash의 실행 경로(일반적으로 &lt;code&gt;C:\Program Files\Git\bin\bash.exe&lt;/code&gt;)를 지정하면 된다. 또한 Git Bash 터미널을 열 때마다 자동으로 실행할 명령어는 &lt;code&gt;.bashrc&lt;/code&gt; 파일에 미리 입력해 두면 된다.&lt;/p&gt;</description>
      <category>소소한 일상. 다요리.</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1511</guid>
      <comments>https://woongheelee.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0%EC%97%90%EC%84%9C-%ED%84%B0%EB%AF%B8%EB%84%90-%EC%84%A4#entry1511comment</comments>
      <pubDate>Thu, 17 Oct 2024 23:57:12 +0900</pubDate>
    </item>
    <item>
      <title>윈도우(Windows)에 레이텍(LaTex) 환경 설치</title>
      <link>https://woongheelee.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0Windows%EC%97%90-%EB%A0%88%EC%9D%B4%ED%85%8DLaTex-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%B9%98</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;2024년 10월에 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;현재는 설정이 간편하고, 온라인에 있는 템플릿을 쓰기 좋아서 오버리프(&lt;a href=&quot;https://www.overleaf.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.overleaf.com/&lt;/a&gt;)를 사용 중이다. 온라인 접속이 힘든 환경이면 오버리프 도커 이미지(&lt;a href=&quot;https://github.com/overleaf/overleaf&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/overleaf/overleaf&lt;/a&gt;)를 이용할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;===========&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;윈도우, 맥, 리눅스 세 가지 환경을 모두 사용하지만 논문 작성은 주로 윈도우에서 한다. 전에는 이것 저것 설치 하고, latex 명령어 경로 설정할 것도 많았는데, &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;최종적으로 Texmaker 가 가장 편해서 여기에 정착했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;설치 순서는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 먼저 MiKTeX을 설치한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;링크(&lt;a href=&quot;https://miktex.org/howto/install-miktex&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://miktex.org/howto/install-miktex&lt;/a&gt;)의 방법을 보고, 설치 파일을 다운로드 받아서 그대로 따라하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. Texmaker 를 설치한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;역시 링크(&lt;a href=&quot;https://www.xm1math.net/texmaker/download.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.xm1math.net/texmaker/download.html&lt;/a&gt;)에서 다운로드 받아 설치하면&amp;nbsp;&lt;/p&gt;</description>
      <category>소소한 일상. 다요리.</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1446</guid>
      <comments>https://woongheelee.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0Windows%EC%97%90-%EB%A0%88%EC%9D%B4%ED%85%8DLaTex-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%B9%98#entry1446comment</comments>
      <pubDate>Wed, 2 Oct 2024 11:28:05 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 (python) 프로젝트 사용 패키지 버전 추출 (requirments.txt 만들기)</title>
      <link>https://woongheelee.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-python-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%82%AC%EC%9A%A9-%ED%8C%A8%ED%82%A4%EC%A7%80-%EB%B2%84%EC%A0%84-%EC%B6%94%EC%B6%9C-requirmentstxt-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2025.12 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 방법만을 사용하면, 의존성 있는 모든 패키지 목록이 만들어지므로 목록의 길이가 지나치게 길어지는 단점이 있다. 이럴 때는 `pipdeptree`를 설치하여 관리하는 것이 편리하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설치 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;pip install pipdeptree&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용 패턴&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/429c9a3769ec665e1ae58b08c95eb8af.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬으로 뭔가를 만들다 보면 버전 관리가 중요하다. 프로젝트마다 사용하는 패키지 버전이 다르기 때문에, 이를 제대로 관리하지 않으면 패키지 충돌이 발생할 수 있기 때문이다. 이 문제를 방지하기 위해 콘다(conda)를 쓰건, 다른 도구를 쓰건 보통 pip을 써서 패키지 목록을 뽑을 수 있다. 다음과 같은 명령어를 활용하면 된다. 특히, sed 명령어를 활용하면 불필요한 정보를 삭제할 수 있어 보기 좋게 정리된 패키지 목록이 만들어 진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/2df5c4bcf1c6b61e44dd01bc536c1e28.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만들어진 파일을 가지고 나중에 &lt;b&gt;pip install -r requirements.txt&lt;/b&gt; 명령어로 환경을 재현할 수 있다.&lt;/p&gt;</description>
      <category>노트정리/파이썬 Python</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1510</guid>
      <comments>https://woongheelee.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-python-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%82%AC%EC%9A%A9-%ED%8C%A8%ED%82%A4%EC%A7%80-%EB%B2%84%EC%A0%84-%EC%B6%94%EC%B6%9C-requirmentstxt-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry1510comment</comments>
      <pubDate>Tue, 17 Sep 2024 16:46:51 +0900</pubDate>
    </item>
    <item>
      <title>깃(git) 커밋 날짜 임의로 지정하고 푸시하기</title>
      <link>https://woongheelee.com/entry/%EA%B9%83git-%EC%BB%A4%EB%B0%8B-%EB%82%A0%EC%A7%9C-%EC%9E%84%EC%9D%98%EB%A1%9C-%EC%A7%80%EC%A0%95%ED%95%98%EA%B3%A0-%ED%91%B8%EC%8B%9C%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;만약 오늘이 2024년 9월 14일이고, 커밋은 9월 15일 12시 30분으로 하고 싶다면, 아래 명령어를 쓴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/421c471b962b802137bf9590cdccd1f5.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고, 깃허브에 푸시를 한다면, 웹에서 나타나는 시간은 해당 날짜 전까지는 now로 찍히게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://andornot.tistory.com/5&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://andornot.tistory.com/5&lt;/a&gt;&lt;/p&gt;</description>
      <category>노트정리/버전관리 version control</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1509</guid>
      <comments>https://woongheelee.com/entry/%EA%B9%83git-%EC%BB%A4%EB%B0%8B-%EB%82%A0%EC%A7%9C-%EC%9E%84%EC%9D%98%EB%A1%9C-%EC%A7%80%EC%A0%95%ED%95%98%EA%B3%A0-%ED%91%B8%EC%8B%9C%ED%95%98%EA%B8%B0#entry1509comment</comments>
      <pubDate>Tue, 17 Sep 2024 13:40:52 +0900</pubDate>
    </item>
    <item>
      <title>빌 루바노빅&amp;nbsp;씀, 한용재&amp;nbsp;,&amp;nbsp;한바름&amp;nbsp;번역 (2024), 처음 시작하는 FastAPI, 한빛미디어</title>
      <link>https://woongheelee.com/entry/%EB%B9%8C-%EB%A3%A8%EB%B0%94%EB%85%B8%EB%B9%85-%EC%94%80-%ED%95%9C%EC%9A%A9%EC%9E%AC-%ED%95%9C%EB%B0%94%EB%A6%84-%EB%B2%88%EC%97%AD-2024-%EC%B2%98%EC%9D%8C-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-FastAPI-%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;웹 애플리케이션 구현에 사용할 기술을 고민하던 중 FastAPI를 선택했다. 리뷰를 찾아본 결과, 괜찮은 책이라는 확신이 들어 읽게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹에서 무료로 볼 수 있는 자료도 있었지만, 웹 애플리케이션 개발이 익숙하지 않은 나로서는 이 책이 더 도움이 되었다. 책에는 코드나 경로가 가끔 잘못된 경우가 있었지만, 출판사 웹사이트의 정오표를 참고하면서 실습했고, 정오표에 없는 오류는 에러 메시지를 보며 스스로 수정할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;최근에는 Claude 유료 버전과 같은 AI 도구를 활용하여 프로그램 개발에 필요한 논리 구조와 적절한 기술 가이드를 받을 수 있어 프로그래밍이 더 쉬워졌다. 그래서 처음에는 코드를 한 줄씩 따라 작성하며 이해하려고 했지만, 독서 과정에서 FastAPI의 개념을 더 깊이 배우는 데 중점을 두었다. 그 결과, 내가 계획한 웹 애플리케이션을 FastAPI로 성공적으로 구현할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 책은 전자도서관에서 대여하여 읽었으며, 총 20시간이 소요되었다.&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1508</guid>
      <comments>https://woongheelee.com/entry/%EB%B9%8C-%EB%A3%A8%EB%B0%94%EB%85%B8%EB%B9%85-%EC%94%80-%ED%95%9C%EC%9A%A9%EC%9E%AC-%ED%95%9C%EB%B0%94%EB%A6%84-%EB%B2%88%EC%97%AD-2024-%EC%B2%98%EC%9D%8C-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-FastAPI-%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4#entry1508comment</comments>
      <pubDate>Tue, 17 Sep 2024 13:38:17 +0900</pubDate>
    </item>
    <item>
      <title>정호영,&amp;nbsp;진유림&amp;nbsp;저 (2023), 팀 개발을 위한 Git, GitHub 시작하기, 한빛미디어</title>
      <link>https://woongheelee.com/entry/%EC%A0%95%ED%98%B8%EC%98%81-%EC%A7%84%EC%9C%A0%EB%A6%BC-%EC%A0%80-2023-%ED%8C%80-%EA%B0%9C%EB%B0%9C%EC%9D%84-%EC%9C%84%ED%95%9C-Git-GitHub-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;오랜 기간 Git을 사용해왔지만, 개념을 확실히 다지고자 책을 읽어보았다. 특히 브랜치를 그림으로 설명하는 방식이 인상적이었다. Git을 주로 혼자 사용하다 보니 항상 익숙한 명령어만 썼는데, 협업을 위한 개념들을 정리할 수 있어서 좋았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;흥미롭게도 책에서 예제로 소개한 Git 계정(&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/Cat-Hanbit)과&quot;&gt;https://github.com/Cat-Hanbit)과&lt;/a&gt; 리포지토리가 실제로 GitHub에 존재한다. 해당 계정과 리포지토리를 탐색하다 보면 'Git 브랜치 배우기'(&lt;a href=&quot;https://learngitbranching.js.org/?locale=ko)를&quot;&gt;https://learngitbranching.js.org/?locale=ko)를&lt;/a&gt; 발견할 수 있는데, 이 과정을 모두 따라 해 보면 책 후반부의 CLI 설명을 굳이 볼 필요가 없을 정도이다. 책의 문자 설명과 달리, 'Git 브랜치 배우기'에서는 직접 명령어를 입력해보고 애니메이션을 통해 개념을 배울 수 있어서 학습 효율이 크게 차이난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;책은 마지막 두 개의 챕터를 제외하고 모두 읽었다. 회사 도서관에서 열람 가능한 전자책으로 읽었으며, 세 시간이 채 걸리지 않았다.&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1507</guid>
      <comments>https://woongheelee.com/entry/%EC%A0%95%ED%98%B8%EC%98%81-%EC%A7%84%EC%9C%A0%EB%A6%BC-%EC%A0%80-2023-%ED%8C%80-%EA%B0%9C%EB%B0%9C%EC%9D%84-%EC%9C%84%ED%95%9C-Git-GitHub-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4#entry1507comment</comments>
      <pubDate>Tue, 17 Sep 2024 13:35:36 +0900</pubDate>
    </item>
    <item>
      <title>캐럴 드웩 씀, 김준수 번역 (2017), 마인드셋, 스몰빅라이프</title>
      <link>https://woongheelee.com/entry/%EC%BA%90%EB%9F%B4-%EB%93%9C%EC%9B%A9-%EC%94%80-%EA%B9%80%EC%A4%80%EC%88%98-%EB%B2%88%EC%97%AD-2017-%EB%A7%88%EC%9D%B8%EB%93%9C%EC%85%8B-%EC%8A%A4%EB%AA%B0%EB%B9%85%EB%9D%BC%EC%9D%B4%ED%94%84</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;신입사원 교육에서 MS 이소영 이사님의 강연을 듣고 읽기로 마음 먹었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;책을 읽다보니 학위를 하고, 연구 경험을 쌓아가는 동안 주변인들로부터 배운 마음 가짐의 일부가 바로 책에서 강조하는 성장 마인드셋이라는 점이 매우 흥미로웠다. 또한 과거의 내가 고정 마인드셋에 단단히 사로 잡혀 있었다는 점을 반성하며 읽었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;책은 한 달 반 전에 빌렸지만 시간 쪼개서 읽다보니 오랜 기간을 썼다. 회사 도서관과 전자도서관에서 빌려 읽고,&amp;nbsp; 약 7시간 걸림&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1506</guid>
      <comments>https://woongheelee.com/entry/%EC%BA%90%EB%9F%B4-%EB%93%9C%EC%9B%A9-%EC%94%80-%EA%B9%80%EC%A4%80%EC%88%98-%EB%B2%88%EC%97%AD-2017-%EB%A7%88%EC%9D%B8%EB%93%9C%EC%85%8B-%EC%8A%A4%EB%AA%B0%EB%B9%85%EB%9D%BC%EC%9D%B4%ED%94%84#entry1506comment</comments>
      <pubDate>Sun, 8 Sep 2024 13:50:33 +0900</pubDate>
    </item>
    <item>
      <title>쉘(bash shell)에서 귀여운 이모티콘 사용하기</title>
      <link>https://woongheelee.com/entry/%EC%89%98bash-shell%EC%97%90%EC%84%9C-%EA%B7%80%EC%97%AC%EC%9A%B4-%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;터미널로 작업할 때, 이모티콘을 써서 쉘을 다채롭게 쓸 수 있다. 홈 디렉토리의 .bashrc 또는 .bash_profile 파일을 편집기로 열고 아래 쪽에 다음과 같은 명령어를 넣어둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/c9b04e69c31af68eb8b9958037667d01.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 엔터를 칠 때 마다 귀여운 이모티콘이 바뀌는 걸 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &lt;span&gt;export&lt;/span&gt; PS1에는 호스트 컴퓨터 이름(\h)과 현재 디렉토리 위치(\w)만 나타내게 해서, 깊은 디렉토리로 갈 때 프롬프트가 너무 길어지는 것을 막고자 했다. 이 옵션은 취향 껏 바꿔가며 설정할 수 있을 것이다.&lt;/p&gt;</description>
      <category>노트정리/리눅스 linux</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1505</guid>
      <comments>https://woongheelee.com/entry/%EC%89%98bash-shell%EC%97%90%EC%84%9C-%EA%B7%80%EC%97%AC%EC%9A%B4-%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0#entry1505comment</comments>
      <pubDate>Mon, 19 Aug 2024 22:46:45 +0900</pubDate>
    </item>
    <item>
      <title>오가사와라 시게타카 지음, 심효섭 번역 (2022), 그림과 실습으로 배우는 도커 &amp;amp; 쿠버네티스, 위키북스</title>
      <link>https://woongheelee.com/entry/%EC%98%A4%EA%B0%80%EC%82%AC%EC%99%80%EB%9D%BC-%EC%8B%9C%EA%B2%8C%ED%83%80%EC%B9%B4-%EC%A7%80%EC%9D%8C-%EC%8B%AC%ED%9A%A8%EC%84%AD-%EB%B2%88%EC%97%AD-2022-%EA%B7%B8%EB%A6%BC%EA%B3%BC-%EC%8B%A4%EC%8A%B5%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EB%8F%84%EC%BB%A4-%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EC%9C%84%ED%82%A4%EB%B6%81%EC%8A%A4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;도커 개념을 익히고, 필수적인 커맨드를 습득하고자 읽었다. 기존에 피상적이고 파편적으로 뜬구름 잡듯이 알고 있던 것을 실습을 따라해가며, 오류가 생길 때 마다 이를 바로 잡고, 추가로 궁금한걸 돌려가며 좀 더 구체적으로 알 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책의 실습 코드를 따라할 때는 이 책이 2022년도에 출판되었다는 점을 주의해야 한다. 책에서 다루는 mysql 이미지는 당시 최신 버전이 8.0이었을 것 같은데, 책에 있는 대로 환경 변수(environment variables)를 따라하면 역시 오류가 난다. 따라서 mysql:8.0 같은 방식으로 책에서 사용한 버전을 그대로 써주거나, 최신 환경 변수를 버전에 맞게 설정해주어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한편, 책에 오탈자가 별로 없긴 하지만, 명령어 중에 잘못 된 것이 있으므로 출판사 웹사이트(&lt;u&gt;&lt;i&gt;&lt;a href=&quot;https://wikibook.co.kr/dkkb-ebook/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://wikibook.co.kr/dkkb-ebook/&lt;/a&gt;&lt;/i&gt;&lt;/u&gt;)에서 미리 틀린 부분을 찾아 교정해두는게 실습을 따라하기 좋을 것이다. 특히 244쪽의 비밀번호 설정이 불일치하는 오타가 있어서 주의해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 마지막 장인 8장을 남겨두었다. 독서는 현재&amp;nbsp; 7시간 반이 걸렸다. 회사 도서관에서 빌려 읽음&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1504</guid>
      <comments>https://woongheelee.com/entry/%EC%98%A4%EA%B0%80%EC%82%AC%EC%99%80%EB%9D%BC-%EC%8B%9C%EA%B2%8C%ED%83%80%EC%B9%B4-%EC%A7%80%EC%9D%8C-%EC%8B%AC%ED%9A%A8%EC%84%AD-%EB%B2%88%EC%97%AD-2022-%EA%B7%B8%EB%A6%BC%EA%B3%BC-%EC%8B%A4%EC%8A%B5%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EB%8F%84%EC%BB%A4-%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EC%9C%84%ED%82%A4%EB%B6%81%EC%8A%A4#entry1504comment</comments>
      <pubDate>Sun, 18 Aug 2024 19:06:59 +0900</pubDate>
    </item>
    <item>
      <title>내가 작성한 깃허브 지스트(github gist)에서 특정 키워드 검색</title>
      <link>https://woongheelee.com/entry/%EB%82%B4%EA%B0%80-%EC%9E%91%EC%84%B1%ED%95%9C-%EA%B9%83%ED%97%88%EB%B8%8C-%EC%A7%80%EC%8A%A4%ED%8A%B8github-gist%EC%97%90%EC%84%9C-%ED%8A%B9%EC%A0%95-%ED%82%A4%EC%9B%8C%EB%93%9C-%EA%B2%80%EC%83%89</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;gist에서 &lt;b&gt;내가 작성했던 코드 조각 중에 특정 키워드로 뭔가를 검색하려면&lt;/b&gt; 그냥은 안된다. 그럴 때는 &lt;b&gt;아래 명령어로 검색&lt;/b&gt;하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ffffff; background-color: #333333;&quot;&gt;user:username term&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 만약 &lt;b&gt;내가 작성했던 것 중(아이디: WoongheeLee)에 vi(검색할 단어)에 관한 코드 조각을 검색&lt;/b&gt;하려면 아래처럼 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ffffff; background-color: #333333;&quot;&gt;user:WoongheeLee vi&lt;/span&gt;&lt;/p&gt;</description>
      <category>노트정리/버전관리 version control</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1503</guid>
      <comments>https://woongheelee.com/entry/%EB%82%B4%EA%B0%80-%EC%9E%91%EC%84%B1%ED%95%9C-%EA%B9%83%ED%97%88%EB%B8%8C-%EC%A7%80%EC%8A%A4%ED%8A%B8github-gist%EC%97%90%EC%84%9C-%ED%8A%B9%EC%A0%95-%ED%82%A4%EC%9B%8C%EB%93%9C-%EA%B2%80%EC%83%89#entry1503comment</comments>
      <pubDate>Sat, 17 Aug 2024 13:49:04 +0900</pubDate>
    </item>
    <item>
      <title>ssh 터널링으로 게이트웨이틀 통해 타겟 서버에 접속하기</title>
      <link>https://woongheelee.com/entry/ssh-%ED%84%B0%EB%84%90%EB%A7%81%EC%9C%BC%EB%A1%9C-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4%ED%8B%80-%ED%86%B5%ED%95%B4-%ED%83%80%EA%B2%9F-%EC%84%9C%EB%B2%84%EC%97%90-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;예를 들어 내 컴퓨터에서 중간 건널목인 &lt;b&gt;게이트웨이 서버를 통해서 특정 목표 지점이 되는 타겟 서버로 접속&lt;/b&gt;한다고 해보자. 이 때 마침 내가 사용하는 컴퓨터인 &lt;b&gt;로컬 컴퓨터는 포트가 1111&lt;/b&gt;만 열려 있고, &lt;b&gt;게이트웨이서버는 2222&lt;/b&gt;, 그리고 &lt;b&gt;타겟 서버는 3333&lt;/b&gt;만 열려 있는 복잡한 상황일 때 어떻게 접속할 수 있을까? &lt;b&gt;게이트웨이 서버의 주소가 123.0.0.3&lt;/b&gt;, &lt;b&gt;타겟 서버 주소가 123.0.0.7&lt;/b&gt;이라면 ssh 명령어를 아래처럼 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #333333; color: #ffffff;&quot;&gt;ssh -L 1111:123.0.0.7:3333 -N &lt;a style=&quot;background-color: #333333; color: #ffffff;&quot; href=&quot;mailto:my_id@123.0.0.3&quot;&gt;my_id@123.0.0.3&lt;/a&gt; -p 2222&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위 명령어를 요소별로 좀 더 자세히보면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;L:&lt;/b&gt; 로컬 컴퓨터의 특정 포트(예시에서는 1111)를 타겟 서버의 특정 포트(예시에서는 3333)으로 연결해주는 역할을 한다. 따라서 localhost:1111 같은 방식으로 접근하면 타겟 서버의 3333포트로 들어가게 된다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;p:&lt;/b&gt; 게이트웨이 서버에 열려 있는 포트 번호&lt;/li&gt;
&lt;li&gt;&lt;b&gt;N:&lt;/b&gt; 서버에 접속해서 쉘 명령어를 안쓸거라는 걸 알려&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고&lt;/b&gt; &lt;a href=&quot;https://man7.org/linux/man-pages/man1/ssh.1.html&quot;&gt;https://man7.org/linux/man-pages/man1/ssh.1.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>노트정리/리눅스 linux</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1502</guid>
      <comments>https://woongheelee.com/entry/ssh-%ED%84%B0%EB%84%90%EB%A7%81%EC%9C%BC%EB%A1%9C-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4%ED%8B%80-%ED%86%B5%ED%95%B4-%ED%83%80%EA%B2%9F-%EC%84%9C%EB%B2%84%EC%97%90-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0#entry1502comment</comments>
      <pubDate>Sat, 17 Aug 2024 13:46:18 +0900</pubDate>
    </item>
    <item>
      <title>파워포인트 모든 페이지에서 한글 단어 잘림 해결하기</title>
      <link>https://woongheelee.com/entry/%ED%8C%8C%EC%9B%8C%ED%8F%AC%EC%9D%B8%ED%8A%B8-%EB%AA%A8%EB%93%A0-%ED%8E%98%EC%9D%B4%EC%A7%80%EC%97%90%EC%84%9C-%ED%95%9C%EA%B8%80-%EB%8B%A8%EC%96%B4-%EC%9E%98%EB%A6%BC-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;슬라이드를 만들다 보면 줄바꿈하면서 한글 단어가 잘려서 보기 싫다. 그럴 땐 &lt;b&gt;(1)&lt;/b&gt; &lt;b&gt;한글 단어가 잘리면 안되는 곳을 블록 선택&lt;/b&gt;하고 &lt;b&gt;(2) 마우스 우클릭&lt;/b&gt; 후 &lt;b&gt;(3) 단락&lt;/b&gt;을 선택하고 &lt;b&gt;(4) 한글 단어 잘림 허용을 체크 해제&lt;/b&gt;하면 된다. 그러면 해당 페이지의 선택 영역에서만 단어 잘림을 방지할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;모든 페이지에서 단어가 잘리지 않도록 하려면&lt;/b&gt; 이전 글(&lt;a href=&quot;https://woongheelee.com/entry/%ED%8C%8C%EC%9B%8C-%ED%8F%AC%EC%9D%B8%ED%8A%B8%EC%97%90%EC%84%9C-%EC%8A%A4%ED%94%BC%EC%BB%A4-%EB%85%B8%ED%8A%B8-%EB%8C%80%EB%B3%B8-%EA%B8%80%EC%9E%90-%ED%81%AC%EA%B8%B0-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;u&gt;&lt;i&gt;대본 글자 크기 변경&lt;/i&gt;&lt;/u&gt;&lt;/a&gt;)에서 다룬 것 처럼 &lt;b&gt;슬라이드 마스터에서 한글 단어 잘림 허용을 해제&lt;/b&gt;하면 된다. 즉,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[보기] -&amp;gt; [슬라이드 마스터] -&amp;gt; 위 방법 적용&lt;/b&gt;&lt;/p&gt;</description>
      <category>노트정리/파워포인트 PPT</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1501</guid>
      <comments>https://woongheelee.com/entry/%ED%8C%8C%EC%9B%8C%ED%8F%AC%EC%9D%B8%ED%8A%B8-%EB%AA%A8%EB%93%A0-%ED%8E%98%EC%9D%B4%EC%A7%80%EC%97%90%EC%84%9C-%ED%95%9C%EA%B8%80-%EB%8B%A8%EC%96%B4-%EC%9E%98%EB%A6%BC-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0#entry1501comment</comments>
      <pubDate>Wed, 29 May 2024 16:36:51 +0900</pubDate>
    </item>
    <item>
      <title>권오현(2018), 초격차, 쌤앤파커스</title>
      <link>https://woongheelee.com/entry/%EA%B6%8C%EC%98%A4%ED%98%842018-%EC%B4%88%EA%B2%A9%EC%B0%A8-%EC%8C%A4%EC%95%A4%ED%8C%8C%EC%BB%A4%EC%8A%A4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;최근에 읽은 책(&lt;a href=&quot;https://woongheelee.com/entry/%EC%9D%B4%EC%A4%80%ED%9D%AC2023-%EB%A9%B4%EC%A0%91%EB%B0%94%EC%9D%B4%EB%B8%94-20-%EC%96%BC%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%B6%81%EC%8A%A4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;면접바이블&lt;/a&gt;)의 말미에서 추천하기에 읽어보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 책은 산업계에서 리더가 갖추어야 할 자세를 다루고 있다. 책은 크게 네 개의 장으로 나뉘어있다. 전반부 두 개의 장에서는 리더와 조직이 갖추어야할 격의 프레임워크를 제시하고, 나머지 두 개의 장에서는 전반부 보다는 다소 상세한 예시를 들어서 조직이 살아남기 위해서 어떻게 해야 하는지, 사람은 어떻게 써야하는지를 다룬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사업 기밀 때문에 상세한 내용이 빠진 느낌이 많이 들긴 해도 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;리더로서 냉정하고 피말리는 산업계에서 성장하고 살아남은 저자의 &lt;/span&gt;생생한 경험을 느낄 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전자책으로 빌려 읽었고, 4시간이 덜 걸렸다.&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1500</guid>
      <comments>https://woongheelee.com/entry/%EA%B6%8C%EC%98%A4%ED%98%842018-%EC%B4%88%EA%B2%A9%EC%B0%A8-%EC%8C%A4%EC%95%A4%ED%8C%8C%EC%BB%A4%EC%8A%A4#entry1500comment</comments>
      <pubDate>Mon, 27 May 2024 15:39:49 +0900</pubDate>
    </item>
    <item>
      <title>파워 포인트에서 스피커 노트 (대본) 글자 크기 변경</title>
      <link>https://woongheelee.com/entry/%ED%8C%8C%EC%9B%8C-%ED%8F%AC%EC%9D%B8%ED%8A%B8%EC%97%90%EC%84%9C-%EC%8A%A4%ED%94%BC%EC%BB%A4-%EB%85%B8%ED%8A%B8-%EB%8C%80%EB%B3%B8-%EA%B8%80%EC%9E%90-%ED%81%AC%EA%B8%B0-%EB%B3%80%EA%B2%BD</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;파워 포인트로 발표 자료를 만들 때, 매 페이지 아래에 대본을 써둔다. 그런데, 특히 맥을 쓸 때 화질 좋은 모니터로 바꾸어가며 사용하다보면 대본 글자 크기가 너무 작아서 보기 힘든 경우가 있다. 그럴 땐 모든 페이지의 대본 글자 크기를 한 번에 변경할 수 있다. 방법은 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. &lt;b&gt;[보기]를 가서 [슬라이드 노트 마스터]&lt;/b&gt;를 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2.&lt;/b&gt; 그러면 화면 상단에 보이는 게 만들어둔 슬라이드 서식이고, &lt;b&gt;아래에 대본(스피커 노트)이 나타난다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3.&lt;/b&gt; &lt;b&gt;대본 텍스트 박스를 선택&lt;/b&gt;하고 &lt;b&gt;[홈]에서 원하는 [폰트 크기]를 선택&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이러면 모든 글자 크기가 한 방에 변경된 걸 확인할 수 있다. 물론 슬라이드 마스터를 이용하면 페이지 서식에 따라 글자 크기나 폰트 또한 한 방에 다 설정이 가능하다.&lt;/p&gt;</description>
      <category>소소한 일상. 다요리.</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1499</guid>
      <comments>https://woongheelee.com/entry/%ED%8C%8C%EC%9B%8C-%ED%8F%AC%EC%9D%B8%ED%8A%B8%EC%97%90%EC%84%9C-%EC%8A%A4%ED%94%BC%EC%BB%A4-%EB%85%B8%ED%8A%B8-%EB%8C%80%EB%B3%B8-%EA%B8%80%EC%9E%90-%ED%81%AC%EA%B8%B0-%EB%B3%80%EA%B2%BD#entry1499comment</comments>
      <pubDate>Sat, 11 May 2024 21:10:42 +0900</pubDate>
    </item>
    <item>
      <title>이준희(2023), 면접바이블 2.0, 얼라이브북스</title>
      <link>https://woongheelee.com/entry/%EC%9D%B4%EC%A4%80%ED%9D%AC2023-%EB%A9%B4%EC%A0%91%EB%B0%94%EC%9D%B4%EB%B8%94-20-%EC%96%BC%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%B6%81%EC%8A%A4</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;저자의 다른 책(&lt;u&gt;&lt;i&gt;&lt;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://woongheelee.com/entry/%EC%9D%B4%EC%A4%80%ED%9D%AC2023-%EC%9D%B4%EC%A7%81-%EB%B0%94%EC%9D%B4%EB%B8%94-%EC%96%BC%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%B6%81%EC%8A%A4&quot;&gt;이직 바이블&lt;/a&gt;&lt;/i&gt;&lt;/u&gt;)이 좋았기에 이 책도 읽어보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;내용이 매우 좋았는데, 특히 인사과 직원의 사고를 엿볼 수 있다는 점이 가장 좋았다. 독서하며 내 경험의 너비를 키워가는 재미가 느껴졌다. 기업이나 조직의 구성원으로서 사고 방식에 공감가는 것이 많아서 막힘 없이 읽어갈 수 있었다. 다만 내용 외적인 부분 때문에 아쉬운 점이 있었다.&lt;br /&gt;&lt;br /&gt;가장 크게 아쉬운 점은 오타가 너무나도 많다는 것이다. 책을 다 읽고 나면 뒤쪽에 교정과 교열 담당자가 있다고 나온다. 하지만 교정과 교열이 된 책이라는 점이 이해가 안 될 수준으로 오타가 많은 편이다. 글을 읽다 보면 문장이 제대로 완성 안 된 것들이 많았다. 그다음으로 아쉬운 점은 유튜브 영상의 댓글에 대한 답변 들을 사이사이 담다 보니 댓글을 단 사람들의 닉네임이 질문과 답변을 읽어갈 때 거슬리게 한다. 오타 때문에 문장 내용이 주장하는 게 잘 이해되지 않을 때는 전체적인 문단의 맥락을 생각해 가며 읽고, 닉네임이 글의 흐름을 끊을 때는 닉네임은 읽지 않고 무시하며 읽어갔다. &lt;br /&gt;&lt;br /&gt;책의&amp;nbsp;페이지&amp;nbsp;수로&amp;nbsp;따지면&amp;nbsp;분량이&amp;nbsp;많지&amp;nbsp;않아서&amp;nbsp;금방&amp;nbsp;읽기&amp;nbsp;좋다.&amp;nbsp;전자책으로&amp;nbsp;빌려&amp;nbsp;읽고&amp;nbsp;4시간이&amp;nbsp;덜&amp;nbsp;걸렸다.&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1498</guid>
      <comments>https://woongheelee.com/entry/%EC%9D%B4%EC%A4%80%ED%9D%AC2023-%EB%A9%B4%EC%A0%91%EB%B0%94%EC%9D%B4%EB%B8%94-20-%EC%96%BC%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%B6%81%EC%8A%A4#entry1498comment</comments>
      <pubDate>Sun, 5 May 2024 15:26:02 +0900</pubDate>
    </item>
    <item>
      <title>1차 논리(술어 논리)를 이용한 삼단논법 증명</title>
      <link>https://woongheelee.com/entry/1%EC%B0%A8-%EB%85%BC%EB%A6%AC%EC%88%A0%EC%96%B4-%EB%85%BC%EB%A6%AC%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%82%BC%EB%8B%A8%EB%85%BC%EB%B2%95-%EC%A6%9D%EB%AA%85</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;국가직무능력표준(NCS) 문제 중에서 명제논리(&lt;u&gt;&lt;i&gt;&lt;a href=&quot;http://www.lec.co.kr/news/articleView.html?idxno=715753&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;숨은 전제 찾기&lt;/a&gt;, &lt;/i&gt;&lt;/u&gt;&lt;a href=&quot;http://www.lec.co.kr/news/articleView.html?idxno=716502&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;&lt;u&gt;&lt;i&gt;결론 찾기&lt;/i&gt;&lt;/u&gt;&lt;/a&gt;) 문제가 있다. 이런 문제 유형은 NCS 뿐 아니라 많은 기업에서도 직무적성에 출제하고 있다. 문제의 유형은 바로 자연어로 쓴 삼단논법의 전제나 결론을 비워두고, 보기 중에서 올바른 문장을 찾아 넣는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;풀이나 해설을 찾아보면 집합 관계를 이용해 해설하거나 약식으로 해설하는 경우가 많은 데, 이 글에서는 1차 논리(FOL, first-order logic)를 이용해 좀 더 엄밀하게 풀이 과정을 알아보고자 한다. 0차 논리라고 할 수 있는 명제 논리를 일부 고등학교 수학에서 배우기 때문에 자세한 내용은 이번 글에서는 생략한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;FOL로 문제를 풀이하기 위해서는 자연어를 FOL로 번역해야 한다. NCS의 명제논리 문제들은 &quot;모든&quot;이나 &quot;어떤&quot;과 같은 표현을 사용하기 때문에 이런 유형의 문장을 FOL로 번역하는 요령을 먼저 알아두는 것이 좋다. 자연어를 FOL 언어로 표현하는 방법은 그리스 철학자 아리스토텔레스(&lt;i&gt;&lt;u&gt;&lt;a href=&quot;https://plato.stanford.edu/entries/aristotle-logic/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://plato.stanford.edu/entries/aristotle-logic/&lt;/a&gt;&lt;/u&gt;&lt;/i&gt;)가 이미 정형화 해둔 것이 있다. 본래 네 가지 유형이 있지만 약식으로 두 가지만 써보면, 아래와 같다. 이 때 &quot;어떤&quot;의 경우에 주의할 점은 &quot;그리고&quot;라는 개념이 생략되어 있다는 점이다. 또 하나 주의할 점이 많은 문제들에서 &quot;모든&quot;이라는 단어 자체를 생략한다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 모든 P는 Q다. =&amp;gt; &lt;span&gt;&amp;forall;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x (P(x) &lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Q(x))&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 어떤 P는 Q다. =&amp;gt; &lt;span&gt;&amp;exist;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x (P(x) &lt;/span&gt;&lt;span&gt;&amp;and;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Q(x))&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그러면 예시 문제를 하나 보자(출처 링크: &lt;i&gt;&lt;u&gt;&lt;a href=&quot;https://blog.naver.com/jing_june/222290694453&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://blog.naver.com/jing_june/222290694453&lt;/a&gt;&lt;/u&gt;&lt;/i&gt;).&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9PBon/btsGNrCEpbU/7cOt9JDeOXfHygh0TY4Kh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9PBon/btsGNrCEpbU/7cOt9JDeOXfHygh0TY4Kh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9PBon/btsGNrCEpbU/7cOt9JDeOXfHygh0TY4Kh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9PBon%2FbtsGNrCEpbU%2F7cOt9JDeOXfHygh0TY4Kh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;623&quot; height=&quot;450&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위 문제에는 전제가 하나 빠져 있는데, 결론의 의미론(semantic)이 참(True)이 되려면 2번 &quot;성실한 어떤 사람은 직장인이다&quot;가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자연어는 애매 모호한 점이 있기 때문에 위에서 강조한 것 처럼 FOL로 변환해서 생각해보면 엄밀한 증명이 쉬워진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전제 &quot;점심밥을 먹지 않으면 직장인이 아니다.&quot;라는 문장에는 &quot;모든&quot;이 생략되어 있다는 점을 주의해야 한다. 그래서 &quot;모든&quot;이라는 개념을 넣어서 생각해보면, &quot;사람&quot;에 해당하는 변수 x를 이용하여, &quot;사람이 점심을 먹는다&quot;, &quot;사람은 직장인이 아니다&quot;라는 문장의 구성 요소가 아리스토텔레스 방식의 P와 Q에 각각 해당한다. 이 때 P와 Q에 &quot;부정(negation)&quot;이 들어가므로 FOL로 변환해보면 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;점심밥을 먹지 않으면 직장인이 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;=&amp;gt; 모든 사람에 대해서 그 사람이 점심밥을 먹지 않으면, 그 사람은 직장인이 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;=&amp;gt; 모든 사람에 대해서 ( 그 사람이 점심밥을 먹지 않다. -&amp;gt; 그 사람은 직장인이 아니다. )&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;=&amp;gt; &amp;forall;x (&amp;not;Lunch(x) &amp;rarr; &amp;not;Worker(x))&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;한편, 답에 해당하는 필요한 전제 2번 &quot;성실한 어떤 사람은 직장인이다&quot;는 역시 아리스토텔레스 방식으로 바꾸면 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;성실한 어떤 사람은 직장인이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;=&amp;gt; 어떤 사람에 대해서 그 사람은 성실하고, 그 사람은 직장인이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;=&amp;gt; 어떤 사람에 대해서 (그 사람은 성실하다 '그리고' 그 사람은 직장인이다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;=&amp;gt; &amp;exist;x&amp;nbsp;(Worker(x)&amp;nbsp;&amp;and;&amp;nbsp;Industrious(x))&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;마지막으로 결론도 위와 같은 요령에 따라 바꾸면 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;성실한 어떤 사람은 점심밥을 먹는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;=&amp;gt; 어떤 사람에 대해서 그 사람은 성실하고, 그 사람은 점심밥을 먹는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;=&amp;gt; 어떤 사람에 대해서 (그 사람은 성실하다 '그리고' 그 사람은 점심밥을 먹는다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;=&amp;gt; &amp;exist;x&amp;nbsp;(Industrious(x)&amp;nbsp;&amp;and;&amp;nbsp;Lunch(x))&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;FOL로 변환이 끝났으면, 이 문법을 이용하여, 왜 2번 문장이 들어가면 결론이 참이 되는지 증명을 해보면 아래와 같다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;463&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqXWkr/btsGMEv0gAQ/SgXB6eFmY07pwzSxjUBBB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqXWkr/btsGMEv0gAQ/SgXB6eFmY07pwzSxjUBBB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqXWkr/btsGMEv0gAQ/SgXB6eFmY07pwzSxjUBBB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdqXWkr%2FbtsGMEv0gAQ%2FSgXB6eFmY07pwzSxjUBBB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;541&quot; height=&quot;463&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;463&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;한 줄씩 해설을 해보면, 위 그림에서 1번과 2번 줄은 전제에 해당하고, 11번 줄은 결론에 해당한다. 그리고 그 사이의 문장들이 결론이 참이라는 과정을 이끌어 내기 위한 중간 증명들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위 삼단 논법에서 2번 줄에 우리가 정답으로 골랐던 전제를 이용한다. 3번 줄과 같이 어떤 a라는 사람을 가정한다. 즉, 전제에 따라서 &quot;a라는 사람은 직장인이고, 성실하다&quot;라는 점을 가정하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 1번 줄에 써둔 전제에 따라서 &quot;a라는 사람이 점심을 먹지 않으면, a는 직장인이 아니다&quot; (5번 줄). 이걸 명제의 대우(contrapositive)에 의해 &quot;a라는 사람이 직장인이면, a는 점심을 먹는다&quot;라는 게 참이라는 걸 알아낼 수 있다(6번 줄).&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;한편, 3번 줄에 가정한 바에 따르면, &quot;a라는 사람은 직장인이다&quot;(4번 줄). 이런 사실과 6번 줄에서 이끌어낸 진실 &quot;a라는 사람이 직장인이면, a는 점심을 먹는다&quot;로부터 &quot;a는 점심을 먹는다&quot;라는 사실을 이끌낼 수 있다(7번 줄).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;다시 3번 줄의 가정에서 &quot;a는 성실하다&quot;가 사실이라는 사실을 알았다(8번 줄).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&quot;a는 점심을 먹는다&quot; 그리고 &quot;a는 성실하다&quot;라는 사실은 동시에 참이 되므로 묶어(conjunction)줄 수 있다. 즉, &quot;a는 성실하고, 점심을 먹는다&quot;가 참이 된다(9번 줄). 즉, &quot;어떤 사람에 대해서 그 사람이 성실하고, 점심을 먹는다(성실한 어떤 사람은 점심밥을 먹는다)&quot;라는 문장이 참이 된다(10번 줄).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;마지막으로 &quot;성실한 어떤 사람은 점심밥을 먹는다.&quot;라는 전제가 있을 때(2번 줄), &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;a라는 사람을 가정하면(3-10번 줄), &quot; 성실한 어떤 사람은 점심밥을 먹는다&quot;가 참이라는 점을 알 수 있는 것이다(11번 줄).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위 예시 문제를 훨씬 간략하게 표현하면 아래 처럼 표현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전제 1. &amp;forall;x (&amp;not;P(x) &amp;rarr; &amp;not;Q(x))&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전제 2. &amp;exist;x&amp;nbsp;(Q(x)&amp;nbsp;&amp;and;&amp;nbsp;R(x))&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;결론. &amp;exist;x&amp;nbsp;(R(x)&amp;nbsp;&amp;and;&amp;nbsp;P(x))&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위 예시를 통해 증명을 해보았으므로, 자연어로 어떻게 표현이 되었든지 간에 FOL로 간략화해서 어떤 변수 x를 꾸며주는 술어 P, Q, R의 위치와 부정( &amp;not; negation)의 유무의 위치를 주의하고,&amp;nbsp; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;추가로 &quot;그리고&quot;에 해당하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;and; (conjunction)의 앞 뒤는 교환법칙이 성립한다는 점 만 잘 확인하면 답은 쉽게 골라낼 수 있을 걸로 생각이 든다.&lt;/p&gt;</description>
      <category>노트정리/논리형 프로그래밍 logic programming</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1497</guid>
      <comments>https://woongheelee.com/entry/1%EC%B0%A8-%EB%85%BC%EB%A6%AC%EC%88%A0%EC%96%B4-%EB%85%BC%EB%A6%AC%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%82%BC%EB%8B%A8%EB%85%BC%EB%B2%95-%EC%A6%9D%EB%AA%85#entry1497comment</comments>
      <pubDate>Mon, 22 Apr 2024 05:43:05 +0900</pubDate>
    </item>
    <item>
      <title>아나콘다(anaconda)의 환경 활성화와 비활성화 할 때, 특정 명령어 실행하기</title>
      <link>https://woongheelee.com/entry/%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4anaconda%EC%9D%98-%ED%99%98%EA%B2%BD-%ED%99%9C%EC%84%B1%ED%99%94%EC%99%80-%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94-%ED%95%A0-%EB%95%8C-%ED%8A%B9%EC%A0%95-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;만약 리눅스에서 아나콘다를 쓴다면 편하게 터미널에 명령어로 가상환경을 활성화하거나 비활성화 할 수 있다. 예를 들어 가상환경 이름이 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;venv&lt;/span&gt;라고 하면, &lt;span style=&quot;background-color: #dddddd;&quot;&gt;conda activate '환경이름'&lt;/span&gt;으로 활성화하고, &lt;span style=&quot;background-color: #dddddd;&quot;&gt;conda deactivate&lt;/span&gt;로 비활성화 한다. 이 때 가상환경을 활성화 할 때마다 특정 명령어를 실행하고, 그 가상환경을 비활성 할 때도 역시 특정 명령어를 실행하고 싶다면,&amp;nbsp; 다음과 같은 방법을 따르면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;콘다가 설치 된 디렉토리에서 해당 가상환경의 하위 디렉토리에 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;etc&lt;/span&gt;라는 것이 있다. 이 디렉토리의 하위 디렉토리로 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;conda/activate.d&lt;/span&gt;나 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;conda/deactivated.d&lt;/span&gt;를 만들어서 실행하고자 하는 명령어를 넣으면 된다. 이름에서 짐작할 수 있는 것 처럼 활성화 할 때 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;activate.d&lt;/span&gt; 내의 명령어가 자동 실행되고, 비활성화 할 때는 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;deactivate.d&lt;/span&gt;에 설정한 명령어가 자동실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그러면 여기서는 가상환경을 활성화 할 때, 이전 글( &lt;u&gt;&lt;i&gt;&lt;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://woongheelee.com/entry/%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4anaconda-miniconda%EC%97%90%EC%84%9C-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EB%A7%88%EB%8B%A4-%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98-PATH-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0%EB%A6%AC%EB%88%85%EC%8A%A4&quot;&gt;아나콘다에서 가상환경 마다 환경변수 PATH 설정하기&lt;/a&gt;&lt;/i&gt;&lt;/u&gt; )에서 예시로 들었던 것 처럼 환경변수를 설정하고, 가상환경을 비활성화 할 때 환경변수의 설정을 되돌리는 방법을 실습하기로 한다. 미니콘다를 쓴다면 가정하면,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 가상환경 활성화 할 때 명령어 자동 실행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;~/miniconda/env/&amp;lt;가상환경이름&amp;gt;/etc/conda/activated./set_path.sh&lt;/span&gt; 를 만들고, 편집기로 열어서 아래와 같은 명령어를 넣는다. 아래 예시 명령어는 기존의 환경변수에 새로운 경로를 넣는 것을 뜻한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;export PATH=&quot;$PATH:/home/this_user/ffmpeg6/bin/&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 가상환경을 비활성화 할 때 명령어 자동 실행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;~/miniconda/env/&amp;lt;가상환경이름&amp;gt;/etc/conda/deactivated./unset_path.sh&lt;/span&gt; 를 만들고, 편집기로 열어서 아래와 같은 명령어를 넣는다. 아래 예시는&amp;nbsp;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;sed&lt;/span&gt; 명령어를 응용해서 환경변수에 설정해둔 특정 디렉토리에 해당하는 문자열을 제거하는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;export PATH=&quot;$(echo $PATH | sed 's/:\/home\/this_user\/ffmpeg6\/bin//g')&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇게 설정하면, 이전 글에서 소개한 방법으로 PATH를 세팅했을 때, 콘다 경고 문구가 발생할 수도 있는 현상(환경변수를 덮어쓰기로 세팅해서 경고 해줌)도 없고 깔끔하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참고. &lt;span style=&quot;background-color: #f9f9f9; color: #666666; text-align: left;&quot;&gt;https://conda&lt;/span&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #666666; text-align: left;&quot;&gt;.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#activating-an-environment&lt;/span&gt;&lt;/p&gt;</description>
      <category>노트정리/파이썬 Python</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1496</guid>
      <comments>https://woongheelee.com/entry/%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4anaconda%EC%9D%98-%ED%99%98%EA%B2%BD-%ED%99%9C%EC%84%B1%ED%99%94%EC%99%80-%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94-%ED%95%A0-%EB%95%8C-%ED%8A%B9%EC%A0%95-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0#entry1496comment</comments>
      <pubDate>Fri, 5 Apr 2024 16:06:01 +0900</pubDate>
    </item>
    <item>
      <title>게임 24 풀이 (파이썬으로)</title>
      <link>https://woongheelee.com/entry/%EA%B2%8C%EC%9E%84-24-%ED%92%80%EC%9D%B4-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;게임 24(game of 24)는 정수 네 개가 주어지면, 이 숫자들을 한 번씩만 사용해서 사칙연산으로 24를 만들어내는 것이 목표다. 이 게임은 프롬프트 엔지니어링 방법 중에 하나인 ToT(아래 참고)를 읽으며 알게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예를 들어 4, 4, 6, 8이 주어지면 아래 순서로 사칙연산을 통해 숫자 24를 만들어 낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(스텝 1)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4, 4, 6, 8 중에서 4와 8을 선택하고 + 연산&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4 + 8 = 12&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;따라서 우리가 가진 숫자는 4, 6, 12&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(스텝 2)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4, 6, 12 중에서 4와 6을 선택하고 - 연산&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;6 - 4 = 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;따라서 우리가 가진 숫자는 2, 12&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(스텝 3)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2와 12를 선택하고 * 연산&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2 * 12 = 24&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;따라서 우리가 가진 숫자는 24&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;최종적으로 (4 + 8) * (6 - 4) = 24 가 정답이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 경우는 답이 있는 문제지만 그렇지 않은 경우도 있다. 1, 1, 5, 13 같은 경우가 그렇다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위에서 문제를 풀이할 때는 한 번에 정답 연산을 골라냈지만, 정답 연산 순서가 바로 떠오르지 않을 수 있다. 그럴 때는 모든 숫자에 가능한 모든 연산 방법을 적용해보고 24를 만들어낼 수 있는지 확인해보면 된다. 예를 들어 파이썬으로 이런 해법을 찾으려면 아래와 같이 코드를 만들어 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/b63f6a7f6b62321515b25ad8c6737184.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 웹이나 휴대폰 어플리케이션으로 게임을 해보고 싶으면, 링크(&lt;i&gt;&lt;u&gt;&lt;a href=&quot;https://www.4nums.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.4nums.com/&lt;/a&gt;&lt;/u&gt;&lt;/i&gt;)에서 즐길 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;Yao, S., Yu, D., Zhao, J., Shafran, I., Griffiths, T., Cao, Y., &amp;amp; Narasimhan, K. (2024). Tree of thoughts: Deliberate problem solving with large language models.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;Advances in Neural Information Processing Systems&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;36&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>노트정리/알고리즘 놀이</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1495</guid>
      <comments>https://woongheelee.com/entry/%EA%B2%8C%EC%9E%84-24-%ED%92%80%EC%9D%B4-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C#entry1495comment</comments>
      <pubDate>Wed, 3 Apr 2024 21:10:03 +0900</pubDate>
    </item>
    <item>
      <title>아나콘다(anaconda, miniconda)에서 가상환경 마다 환경변수 PATH 설정하기(리눅스)</title>
      <link>https://woongheelee.com/entry/%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4anaconda-miniconda%EC%97%90%EC%84%9C-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EB%A7%88%EB%8B%A4-%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98-PATH-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0%EB%A6%AC%EB%88%85%EC%8A%A4</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;아나콘다(anaconda, miniconda)는 파이썬의 패키지 버전 관리를 쉽게 도와주는 도구다. &lt;span style=&quot;background-color: #dddddd;&quot;&gt;pip install&lt;/span&gt;이나 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;conda install&lt;/span&gt;로 설치하는 파이썬용 패키지 버전 관리 뿐만 아니라 가상환경 별로 환경변수 PATH에 경로를 특정해줄 수 있다. 그래서 예를 들어 가상환경 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;venv&lt;/span&gt;에서는 ffmpeg 6버전을 쓰고, &lt;span style=&quot;background-color: #dddddd;&quot;&gt;venv2&lt;/span&gt;에서는 ffmpeg 3버전을 쓰게 할 수 있다. 리눅스를 사용할 때, 설정 방법은 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;가상환경 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;venv&lt;/span&gt;에 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;/home/this_user/ffmpeg6/bin/&lt;/span&gt;를 추가한다고 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 가상환경 활성화&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;conda activate venv&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 환경변수 설정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/4da1c8b2588dc76955e3eda938db266e.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 가상환경 비활성화 후 재활성화 하면 끝&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;설정 된 건 해당 가상환경의 conda-meta/state 파일을 열어보면 (미니콘다3 버전 23.3.1 기준으로) 새롭게 설정한 환경변수를 확인할 수 있다.&lt;/p&gt;</description>
      <category>노트정리/파이썬 Python</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1494</guid>
      <comments>https://woongheelee.com/entry/%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4anaconda-miniconda%EC%97%90%EC%84%9C-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EB%A7%88%EB%8B%A4-%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98-PATH-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0%EB%A6%AC%EB%88%85%EC%8A%A4#entry1494comment</comments>
      <pubDate>Mon, 1 Apr 2024 10:52:51 +0900</pubDate>
    </item>
    <item>
      <title>최창한, 김진태 (2017) 레이싱 랩, 골든벨</title>
      <link>https://woongheelee.com/entry/%EC%B5%9C%EC%B0%BD%ED%95%9C-%EA%B9%80%EC%A7%84%ED%83%9C-2017-%EB%A0%88%EC%9D%B4%EC%8B%B1-%EB%9E%A9-%EA%B3%A8%EB%93%A0%EB%B2%A8</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;오토바이를 재미있게 탔던 경험이 있어서( &lt;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://woongheelee.com/entry/%EC%98%A4%ED%86%A0%EB%B0%94%EC%9D%B4-%EA%B4%80%EB%A0%A8-%EC%84%9C%EC%A0%81-%EC%84%B8-%EA%B6%8C&quot;&gt;오토바이 관련 서적 세 권&lt;/a&gt; ) 유사한 장르로 확장해 자동차에 관한 책으로 골라잡아 보았다. 자동차 개발 연구원이며 동시에 자동차 경주 선수인 저자의 레이싱 관련 경험이 녹아있는 책이다. 책은 레이싱에 관한 기술과 저자의 자동차 경주 경험을 일기처럼 풀어 설명한다. 저자의 블로그 글을 책으로 엮어 내었기 때문에 격식 차리지 않고 가볍게 읽을만하다. 다만 자동차에 관해 모르는 용어는 중간중간 유튜브 같은 곳에서 여러 가지 설명을 찾아가며 읽어야 했다. 예를 들어 LSD 같은 것들.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;선물로 골라 받아 읽었고, 가볍게 읽어서 1.5 시간 정도 걸렸다.&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1493</guid>
      <comments>https://woongheelee.com/entry/%EC%B5%9C%EC%B0%BD%ED%95%9C-%EA%B9%80%EC%A7%84%ED%83%9C-2017-%EB%A0%88%EC%9D%B4%EC%8B%B1-%EB%9E%A9-%EA%B3%A8%EB%93%A0%EB%B2%A8#entry1493comment</comments>
      <pubDate>Fri, 29 Mar 2024 23:52:33 +0900</pubDate>
    </item>
    <item>
      <title>이준희(2023), 이직 바이블, 얼라이브북스</title>
      <link>https://woongheelee.com/entry/%EC%9D%B4%EC%A4%80%ED%9D%AC2023-%EC%9D%B4%EC%A7%81-%EB%B0%94%EC%9D%B4%EB%B8%94-%EC%96%BC%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%B6%81%EC%8A%A4</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;도서관에서&amp;nbsp;이직이나&amp;nbsp;면접과&amp;nbsp;관련한&amp;nbsp;책을&amp;nbsp;찾다가&amp;nbsp;찾은&amp;nbsp;책이다.&amp;nbsp;책을&amp;nbsp;쓴&amp;nbsp;사람은&amp;nbsp;유튜브에&amp;nbsp;면접왕&amp;nbsp;이형으로&amp;nbsp;유명한&amp;nbsp;사람으로&amp;nbsp;나&amp;nbsp;또한&amp;nbsp;영상을&amp;nbsp;여러&amp;nbsp;가지&amp;nbsp;보았기&amp;nbsp;때문에&amp;nbsp;매우&amp;nbsp;익숙하고&amp;nbsp;가깝게&amp;nbsp;느껴져&amp;nbsp;이&amp;nbsp;책을&amp;nbsp;읽기로&amp;nbsp;했다. &lt;br /&gt;&lt;br /&gt;경력&amp;nbsp;취업은&amp;nbsp;신입&amp;nbsp;취업과&amp;nbsp;다르고,&amp;nbsp;학계와&amp;nbsp;산업계에서&amp;nbsp;사람을&amp;nbsp;뽑을&amp;nbsp;때&amp;nbsp;요구하는&amp;nbsp;게&amp;nbsp;다른&amp;nbsp;데,&amp;nbsp;이&amp;nbsp;책은&amp;nbsp;산업계에서&amp;nbsp;경력자가&amp;nbsp;이직할&amp;nbsp;때&amp;nbsp;갖출&amp;nbsp;것들을&amp;nbsp;설득력&amp;nbsp;있고&amp;nbsp;쉽게&amp;nbsp;설명해&amp;nbsp;준다. &lt;br /&gt;&lt;br /&gt;책이 갖고 있는 내용도 좋았지만, 쉽게 쓰여 있어 빠르고 막힘없이 읽힌다는 점이 매우 좋았다. 그리고 내가 필요한 챕터부터 읽다 보니 4번 챕터부터 읽어서 독서 시간은 그리 길지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;전자책&amp;nbsp;도서관에서&amp;nbsp;빌려&amp;nbsp;읽고&amp;nbsp;1.75시간&amp;nbsp;정도&amp;nbsp;걸림&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1492</guid>
      <comments>https://woongheelee.com/entry/%EC%9D%B4%EC%A4%80%ED%9D%AC2023-%EC%9D%B4%EC%A7%81-%EB%B0%94%EC%9D%B4%EB%B8%94-%EC%96%BC%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%B6%81%EC%8A%A4#entry1492comment</comments>
      <pubDate>Tue, 26 Mar 2024 21:02:11 +0900</pubDate>
    </item>
    <item>
      <title>SWI-Prolog 기본 에디터 변경하기</title>
      <link>https://woongheelee.com/entry/SWI-Prolog-%EA%B8%B0%EB%B3%B8-%EC%97%90%EB%94%94%ED%84%B0-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;Prolog 콘솔에서 edit 명령어를 사용하면, SWI-Prolog(swipl)이 실행 중인 OS에 따라 편집기가 열리고, edit 명령어의 인자로 넣은 pl 파일을 수정할 수 있다. 그런데 윈도우에서는 메모장이 기본 편집기로 설정되어 있기 때문에 코딩 덕후의 마음을 언짢게 한다. 이럴 땐 내가 원하는 다른 편집기로 바꿀 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;윈도우에서 sublime을 기본 편집기로 바꿔주는 경우를 생각해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;swipl이 설치 된 곳에 가면 edit.pl이 있다. 여기에 기본 편집기를 설정한다. 이 파일을 아무 편집기(아마 sublime)를 관리자 권한으로 실행 후 열어준다. 파일을 열고 잘 찾아보면 아래와 같이 각종 편집기가 정의되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/3dd4bd271af7bee488687ac995c8fcfd.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;swipl이 sublime이 뭔지 모를테니, 편집기 이름을 sublime으로 지어주고, 실행위치를 알려주기로 한다. 예를 들면 아래와 같은 코드를 추가해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/9d5858a2e6a964a0c0edca5138c06b38.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이제 기본으로 실행할 편집기를 sublime으로 바꾸어준다. 기존의 코드는 주석처리해버리거나 지운다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/af7a2177fcda69cc3d841bfc28f7ef4f.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.swi-prolog.org/FAQ/BindEditor.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.swi-prolog.org/FAQ/BindEditor.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.swi-prolog.org/pldoc/doc_for?object=prolog_edit%3Aedit_command/2&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.swi-prolog.org/pldoc/doc_for?object=prolog_edit%3Aedit_command/2&lt;/a&gt;&lt;/p&gt;</description>
      <category>노트정리/논리형 프로그래밍 logic programming</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1491</guid>
      <comments>https://woongheelee.com/entry/SWI-Prolog-%EA%B8%B0%EB%B3%B8-%EC%97%90%EB%94%94%ED%84%B0-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0#entry1491comment</comments>
      <pubDate>Sat, 9 Mar 2024 23:53:27 +0900</pubDate>
    </item>
    <item>
      <title>Barker-Plummer 외 (2011) Language, proof, and logic. CSLI</title>
      <link>https://woongheelee.com/entry/Barker-Plummer-%EC%99%B8-2011-Language-proof-and-logic-CSLI</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;대학교에서 컴퓨터, 소프트웨어전공 학부생을 대상으로 하는 논리학 강의를 위해 읽었다. 다 읽진 않고 총 19개 챕터 중에서 술어논리(1차 논리)에 해당하는 13번 챕터까지 읽었다. 대학원 시절 수업 조교를 하며 지도교수님이 하시는 수업을 몇 년 간 들었기에 책에서 중요한 부분을 놓치지 않을 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 책은 스탠포드 교수들이 주 저자기 때문인지 주로 드는 예시가 미국 문화권의 사람들이 익히 알법한, 하지만 Gen Z 한국 대학생들에게는 다소 생소한 사실들로 이루어져있는 편이다. 예를 들어 마크 트웨인이나 메릴 스트립, 해리슨 포드 등에 관한 이야기들 말이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래도 이 책의 가장 좋은 점 중에 하나는 책에서 다루는 술어 논리 문제들을 풀이하고, 검증할 수 있는 소프트웨어를 제공한다는 점이다. 책에서 다루는 술어 논리 문법만 맞다면, 소프트웨어를 통해 여러 가지 논리적 명제를 만들어보고, 논리적 타당성을 검증해볼 수 있다. 이 소프트웨어들을 쓰다 보면 버그가 좀 있긴 하지만 참을 수 있는 정도다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;내 수업에서는 되도록 쉽게 가르치려고 노력했지만, 그렇다고 책에서 다루는 깊이 있는 내용들을 그냥 지나치기에 아까웠다. 나를 포함해서 인간의 언어 보다 컴퓨터 언어(추상적인)로 대화하는 것을 더 좋아하는 사람들이 있다. 내 수업에서도 술어 논리 공부에 크게 몰입하는 학생들의 있었다. 이들의 지식 습득에 대한 요구를 만족시키고자&amp;nbsp; 책에서 읽은 챕터의 모든 문제를 풀이 후 수업 준비를 하였다. 책의 모든 예제를 풀어보고, 연습 문제 중에서는 논리적 타당성이 없는 증명 문제를 제외한 모든 문제를 풀었다. 그런 후 난이도 별로 쉬운 것 부터 지옥 같이 느껴질 내용 까지를 다루었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;프로그래밍 언어 순위를 볼 수 있는 TIOBE 같은 곳을 보면, 논리적 프로그래밍(logic programming) 언어의 순위가 매우 낮다. 이걸 보면, 컴퓨터/소프트웨어 전공자가 굳이 이 책을 보면서 술어 논리를 배울 필요가 있을까 생각할 수도 있다. 그러나 술어 논리는 인간의 언어(자연어)나 사고 방식을 컴퓨터가 이해할 수 있는 방식으로 번역하는, 추상화를 연습할 수 있다는 점 때문에 매우 중요하다. 또한 컴퓨터 프로그램을 설계하는 사람이, 자신의 프로그램이 올바르게 설계되었다는 사실을 추론해내는 데 사용하는 Hoare logic의 기반이 되기에 또한 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;지금껏 술어 논리를 강의했지만, 안타깝게도 나 역시 논리적 프로그래밍 언어를 따로 공부할 일은 없었다. 그래서 다음으로 익힐 취미는 논리적 프로그래밍 언어인 Prolog로 정해두었다.&lt;/p&gt;</description>
      <category>읽은 책</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1490</guid>
      <comments>https://woongheelee.com/entry/Barker-Plummer-%EC%99%B8-2011-Language-proof-and-logic-CSLI#entry1490comment</comments>
      <pubDate>Wed, 6 Mar 2024 19:55:29 +0900</pubDate>
    </item>
    <item>
      <title>matplotlib에서 축(axis)에 사용자 정의 포맷팅 적용 방법 재정리</title>
      <link>https://woongheelee.com/entry/matplotlib%EC%97%90%EC%84%9C-%EC%B6%95axis%EC%97%90-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98-%ED%8F%AC%EB%A7%B7%ED%8C%85-%EC%A0%81%EC%9A%A9-%EB%B0%A9%EB%B2%95-%EC%9E%AC%EC%A0%95%EB%A6%AC</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;이전 글(&lt;a href=&quot;https://woongheelee.com/entry/matplotlib-%EC%97%90%EC%84%9C-%EC%B6%95axis-%EB%82%B4-%EB%A7%88%EC%9D%8C%EB%8C%80%EB%A1%9C-%EC%93%B0%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;u&gt;&lt;i&gt;matplotlib 에서 축 내 마음대로 쓰기&lt;/i&gt;&lt;/u&gt;&lt;/a&gt;)에서 유사한 주제를 한 번 다룬 바 있지만, matplotlib에서 축에 숫자의 포맷팅 방법을 사용자 입맛에 맞게 적용하는 방법을 재정리 해본다. 여기서는 파이썬에서 f-string을 이용한 문자열 포맷팅(&lt;u&gt;&lt;i&gt;&lt;a href=&quot;https://realpython.com/python-f-strings/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;참고 자료&lt;/a&gt;&lt;/i&gt;&lt;/u&gt;)에 대해서 독자가 충분히 알고 있다고 가정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;matplotlib에서 축에 표시하는 형식을 커스터마이즈하려면 다음 두 가지 단계만 거치면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(1) 표현할 포맷팅 형식을 정의 한다. 이 때 함수에는 &lt;b&gt;tick value&lt;/b&gt;와 &lt;b&gt;position&lt;/b&gt;이라는 두 가지 인자가 들어간다. tick value는 축에 나타나는 값이고, position은 이 tick value를 나타낼 위치를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(2) matplotlib으로 그리는 도화지(예: plt.figure나 plt.subplots 등으로 정의한 현재 그림)에서 커스터마이즈 할 축을 가져와서 윗 단계에서 정의한 함수를 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;matplotlib.ticker.FuncFormatter&lt;/span&gt;에 넣어준다. 그러면 position 1 부터 마지막 숫자까지 순차적으로 윗 단계에서 정의한 함수의 포맷이 적용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예를 들어 y축에 들어가는 숫자를 세 자리 마다 콤마(,)를 찍어 구분하고 싶다면, (1) 세 자릿수 마다 콤마를 찍을 함수를 정의 (2) &lt;span style=&quot;background-color: #dddddd;&quot;&gt;plt.gca().get_yaxis().set_major_formatter&lt;/span&gt;에 위 단계에서 정의한 함수를 적용한다. 아래 코드를 참고 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/a3f589f0511e4235db387ca36eb9be16.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 링크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;a href=&quot;https://stackoverflow.com/questions/25973581/how-to-format-axis-number-format-to-thousands-with-a-comma&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/25973581/how-to-format-axis-number-format-to-thousands-with-a-comma&lt;/a&gt;&lt;br /&gt;2. &lt;a href=&quot;https://matplotlib.org/stable/api/ticker_api.html#matplotlib.ticker.FuncFormatter&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://matplotlib.org/stable/api/ticker_api.html#matplotlib.ticker.FuncFormatter&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>노트정리/시각화 Visualization</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1489</guid>
      <comments>https://woongheelee.com/entry/matplotlib%EC%97%90%EC%84%9C-%EC%B6%95axis%EC%97%90-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98-%ED%8F%AC%EB%A7%B7%ED%8C%85-%EC%A0%81%EC%9A%A9-%EB%B0%A9%EB%B2%95-%EC%9E%AC%EC%A0%95%EB%A6%AC#entry1489comment</comments>
      <pubDate>Sun, 3 Mar 2024 18:29:14 +0900</pubDate>
    </item>
    <item>
      <title>레이텍(LaTeX)에서 수정 한 곳 강조 방법: 하이라이트(\hl) 재정의</title>
      <link>https://woongheelee.com/entry/%EB%A0%88%EC%9D%B4%ED%85%8DLaTeX%EC%97%90%EC%84%9C-%EC%88%98%EC%A0%95-%ED%95%9C-%EA%B3%B3-%EA%B0%95%EC%A1%B0-%EB%B0%A9%EB%B2%95-%ED%95%98%EC%9D%B4%EB%9D%BC%EC%9D%B4%ED%8A%B8hl-%EC%9E%AC%EC%A0%95%EC%9D%98</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;레이텍으로 작성한 논문은 수정 전후에 어느 부분을 바꾸었는지 에디터나 리뷰어가 알기 쉽게 강조 해주는 것이 좋다. 그럴 땐 하이라이트(\hl)를 써주면 된다. 그러면 하이라이트를 끄고 싶을 땐, 수정한 곳을 모두 일일히 찾아서 하이라이트를 없애야하느냐면 그건 아니다. 이전 글( &lt;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://woongheelee.com/entry/LaTeX%EC%97%90%EC%84%9C-%EC%A0%80%EC%9E%90-%EC%A0%95%EB%B3%B4-%EC%9D%B5%EB%AA%85%ED%99%94%ED%95%98%EA%B8%B0&quot;&gt;LaTeX에서 저자 정보 익명화하기&lt;/a&gt; )에서 다룬 것 처럼 레이텍은 조건문을 쓰거나 함수를 재정의하는 방법으로 문서 수정을 일괄적을 쉽게 할 수 있다는 장점이 있다. 여기서도 그런 방법을 사용하면 된다. 하이라이트를 내 마음대로 다른 이름의 함수로 재정의하고, 하이라이트를 끌 때는 그 함수를 아무 역할이 없는 함수로 재정의하면 된다. 방법은 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;- 하이라이트 하고 싶을 때는 2번 라인을 그대로 두고, 3번 라인을 주석 처리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;- 하이라이트를 끌 때는 2번 라인을 주석처리하고, 3번 라인을 주석 해제&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/45a266835d901843ad83b8baa6af6a7a.js&quot;&gt;&lt;/script&gt;</description>
      <category>소소한 일상. 다요리.</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1488</guid>
      <comments>https://woongheelee.com/entry/%EB%A0%88%EC%9D%B4%ED%85%8DLaTeX%EC%97%90%EC%84%9C-%EC%88%98%EC%A0%95-%ED%95%9C-%EA%B3%B3-%EA%B0%95%EC%A1%B0-%EB%B0%A9%EB%B2%95-%ED%95%98%EC%9D%B4%EB%9D%BC%EC%9D%B4%ED%8A%B8hl-%EC%9E%AC%EC%A0%95%EC%9D%98#entry1488comment</comments>
      <pubDate>Tue, 20 Feb 2024 14:31:09 +0900</pubDate>
    </item>
    <item>
      <title>파이토치(pytorch)에서 사전학습 모델과 데이터셋의 경로 설정</title>
      <link>https://woongheelee.com/entry/%ED%8C%8C%EC%9D%B4%ED%86%A0%EC%B9%98pytorch%EC%97%90%EC%84%9C-%EC%82%AC%EC%A0%84%ED%95%99%EC%8A%B5-%EB%AA%A8%EB%8D%B8%EA%B3%BC-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%85%8B%EC%9D%98-%EA%B2%BD%EB%A1%9C-%EC%84%A4%EC%A0%95</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;파이토치를 사용할 때, 사전학습 된 모델을 불러오거나 토치비전 데이터셋(&lt;b&gt;torchvision.datasets&lt;/b&gt;)을 불러올 때, 디스크에 용량을 차지하게 된다. 따로 설정하지 않으면 토치에서 기본으로 설정한 디렉토리에 이런 것들이 저장되는 데, 컴퓨터에 추가적인 저장장치를 마운트해서 사용 중이면 경로를 바꿔서 설정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 사전학습 된 모델의 경로 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ffffff; background-color: #333333;&quot;&gt;TORCH_HOME&lt;/span&gt; 이라는 환경 변수에 사전학습 된 모델 파라미터를 저장할 경로를 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(1) 어느 코드를 사용하건 변경할 경로를 설정해두고 그대로 쓰려면 아래처럼 사용자의 홈 디렉토리에 있는 &lt;span style=&quot;background-color: #333333; color: #ffffff;&quot;&gt;.bashrc&lt;/span&gt; 와 같은 곳에 &lt;span style=&quot;background-color: #333333; color: #ffffff;&quot;&gt;export&lt;/span&gt; 명령어로 &lt;span style=&quot;background-color: #333333; color: #ffffff; text-align: start;&quot;&gt;TORCH_HOME&lt;/span&gt; 환경 변수를 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/505331eaa8f82fbd007848c002a52ae1.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(2) 파이썬 코드에서 마다 디렉토리를 바꿔주려면 아래 처럼 os를 임포트 한 후 내가 사용할 경로를 설정한다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/0a436678cf0e0c1c3658a3d69bf380c0.js&quot;&gt;&lt;/script&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 토치비전 데이터셋 경로 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토치비전 데이터셋의 경로를 내 마음대로 설정하려면, 번거롭지만 &lt;b&gt;torchvision.datasets&lt;/b&gt; 의 데이터 클래스 마다 &lt;b&gt;root&lt;/b&gt; 인자에 특정 디렉토리를 지정해주어야 한다. 위에서 &lt;span style=&quot;background-color: #333333; color: #ffffff; text-align: start;&quot;&gt;TORCH_HOME&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 을 지정해주었으니 이를 이용해서 경로를 설정하면, 사전학습 모델의 체크 포인트와 데이터셋 각각을 통일성 있는 경로에 저장할 수 있다. 예시 코드는 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/WoongheeLee/f7d5b1fc82953718d9f9d3825af072d2.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 사전학습 된 모델 경로 설정&amp;nbsp;&lt;a href=&quot;https://pytorch.org/vision/stable/models.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://pytorch.org/vision/stable/models.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708067263124&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Models and pre-trained weights &amp;mdash; Torchvision 0.17 documentation&quot; data-og-description=&quot;Shortcuts&quot; data-og-host=&quot;pytorch.org&quot; data-og-source-url=&quot;https://pytorch.org/vision/stable/models.html&quot; data-og-url=&quot;https://pytorch.org/vision/stable/models.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://pytorch.org/vision/stable/models.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://pytorch.org/vision/stable/models.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Models and pre-trained weights &amp;mdash; Torchvision 0.17 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Shortcuts&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pytorch.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 데이터셋 경로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://pytorch.org/vision/0.8/datasets.html#cifar&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://pytorch.org/vision/0.8/datasets.html#cifar&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708069289073&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;torchvision.datasets &amp;mdash; Torchvision 0.8.1 documentation&quot; data-og-description=&quot;torchvision.datasets All datasets are subclasses of torch.utils.data.Dataset i.e, they have __getitem__ and __len__ methods implemented. Hence, they can all be passed to a torch.utils.data.DataLoader which can load multiple samples parallelly using torch.m&quot; data-og-host=&quot;pytorch.org&quot; data-og-source-url=&quot;https://pytorch.org/vision/0.8/datasets.html#cifar&quot; data-og-url=&quot;https://pytorch.org/vision/0.8/datasets.html#cifar&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://pytorch.org/vision/0.8/datasets.html#cifar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://pytorch.org/vision/0.8/datasets.html#cifar&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;torchvision.datasets &amp;mdash; Torchvision 0.8.1 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;torchvision.datasets All datasets are subclasses of torch.utils.data.Dataset i.e, they have __getitem__ and __len__ methods implemented. Hence, they can all be passed to a torch.utils.data.DataLoader which can load multiple samples parallelly using torch.m&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pytorch.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>노트정리/인공지능</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1487</guid>
      <comments>https://woongheelee.com/entry/%ED%8C%8C%EC%9D%B4%ED%86%A0%EC%B9%98pytorch%EC%97%90%EC%84%9C-%EC%82%AC%EC%A0%84%ED%95%99%EC%8A%B5-%EB%AA%A8%EB%8D%B8%EA%B3%BC-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%85%8B%EC%9D%98-%EA%B2%BD%EB%A1%9C-%EC%84%A4%EC%A0%95#entry1487comment</comments>
      <pubDate>Fri, 16 Feb 2024 16:43:03 +0900</pubDate>
    </item>
    <item>
      <title>해외 호텔 방문 경험 (2016~2018)</title>
      <link>https://woongheelee.com/entry/%ED%95%B4%EC%99%B8-%ED%98%B8%ED%85%94-%EB%B0%A9%EB%AC%B8-%EA%B2%BD%ED%97%98-20162018</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2016년 캘리포니아 주의 샌프란시스코 방문 때 지금은 호텔 아이콘(Hotel Ikon)으로 이름이 바뀐 파크 호텔에 몇 일 머물렀다. 한국에서 흔히 볼 수 있는 엘리베이터가 아니라 쇠창살 문으로 된 걸 사람이 직접 여닫는 식의 독특한 엘리베이터가 가장 먼저 눈에 들어오는 곳이다. 샌프란시스코 중심부에서 가격이 가장 싼 곳 중에 하나가 아닌가 싶다. 그래서 층 마다 화장실과 욕실이 각각 한 두개 설치되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2017년 오레곤 주의 포틀랜드에서는 이스트사이드롯지에서 머물렀다. 미국 드라마나 영화에서 흔히 볼 수 있는 길거리에 있는 저층 모텔 같은 곳이다. 나중에 알았지만 이곳의 각 방의 레이아웃 또한 미국에서 볼 수 있는 가장 흔한 형태이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2017년 호주 시드니에서 메리톤 스위트에 머물렀다. 지금까지 지낸 해외 숙소 중에서 가장 비싸고 좋은 곳이었지만 아시아계 프론트 직원의 인정사정 없는 안내 속도에 매우 불쾌함을 느낀 곳이다. 고층의 좋은 방에 거실과 방 그리고 좋은 주방이 딸린 곳이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2018년 하와이 호놀룰루 섬에서 파고다 호텔에 머물렀다. 이곳의 호텔들은 고층이지만 방의 레이아웃은 오레곤 주에서 머물렀던 모텔과 유사했다. 자세한 감상은 하와이 방문 시리즈에 남긴 바 있다(&lt;a href=&quot;https://woongheelee.com/entry/2018%EB%85%84-%EC%97%AC%EB%A6%84-%ED%95%98%EC%99%80%EC%9D%B4-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;u&gt;&lt;i&gt;2018년 여름 하와이 출장과 여행 - 첫날&lt;/i&gt;&lt;/u&gt;&lt;/a&gt;).&lt;/p&gt;</description>
      <category>소소한 일상. 다요리.</category>
      <author>공돌이pooh</author>
      <guid isPermaLink="true">https://woongheelee.com/1486</guid>
      <comments>https://woongheelee.com/entry/%ED%95%B4%EC%99%B8-%ED%98%B8%ED%85%94-%EB%B0%A9%EB%AC%B8-%EA%B2%BD%ED%97%98-20162018#entry1486comment</comments>
      <pubDate>Thu, 15 Feb 2024 09:26:02 +0900</pubDate>
    </item>
  </channel>
</rss>