<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Technology &amp;amp; Finance</title>
    <link>https://technfin.tistory.com/</link>
    <description>코딩&amp;amp;재테크 이야기</description>
    <language>ko</language>
    <pubDate>Fri, 17 Jul 2026 18:15:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Tech&amp;amp;Fin</managingEditor>
    <image>
      <title>Technology &amp;amp; Finance</title>
      <url>https://tistory1.daumcdn.net/tistory/4756106/attach/311c5186dd784b98a34c4e2b61d4e376</url>
      <link>https://technfin.tistory.com</link>
    </image>
    <item>
      <title>[비트코인 자동매매 시즌2] #2 - 프로젝트 폴더 구조 설명</title>
      <link>https://technfin.tistory.com/entry/%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8-%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4-%EC%8B%9C%EC%A6%8C2-2-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%8F%B4%EB%8D%94-%EA%B5%AC%EC%A1%B0-%EC%84%A4%EB%AA%85</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20240523_비트코인자동매매_폴더구조잡기.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kU8yK/btsHAok09gV/9yP2lnfsTsk42LhE4yfwfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kU8yK/btsHAok09gV/9yP2lnfsTsk42LhE4yfwfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kU8yK/btsHAok09gV/9yP2lnfsTsk42LhE4yfwfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkU8yK%2FbtsHAok09gV%2F9yP2lnfsTsk42LhE4yfwfk%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;960&quot; height=&quot;540&quot; data-filename=&quot;20240523_비트코인자동매매_폴더구조잡기.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;odyssey-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차 - 클릭하면 이동합니다.&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시작하기 전에&lt;/h2&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;/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;h2 data-ke-size=&quot;size26&quot;&gt;프로젝트 폴더 만들기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;베이스 폴더 만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;베이스 폴더 이름은 technfin-bot으로 만들고 해당 폴더에는 라이센스 관련 파일 등 정보파일 그리고 각종 패키지를 설치할 수 있는 requirements.txt 파일을 보관할 예정입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1716529675049&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[python@instance-technfin ~]$ mkdir technfin-bot
[python@instance-technfin ~]$ cd technfin-bot/
[python@instance-technfin technfin-bot]$ pwd
/home/python/technfin-bot
[python@instance-technfin technfin-bot]$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 먼저 mkdir 명령어를 이용해 폴더를 생성하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1716529817301&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[python@instance-technfin technfin-bot]$ ls -rlt
total 12
-rw-rw-r--. 1 python python 1084 May 24 14:49 LICENSE
-rw-rw-r--. 1 python python  216 May 24 14:49 README.md
-rw-rw-r--. 1 python python  628 May 24 14:49 requirements.txt
[python@instance-technfin technfin-bot]$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더에는 우선 3가지 파일을 만들 예정인데 사실 꼭 필수로 있어야 하는 파일은 아닙니다. 하지만 이번 시즌에는 조금 더 구조적으로 체계적인 프로젝트를 진행해 볼 예정이고 향후 해당 소스를 Git-Hub와 같은 소스 레포지토리에도 업로드할 예정이라 라이센스 라던지 설명(README.md)파일과 패키지 설치용 파일등을 만들어 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1716529968491&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MIT License

Copyright (c) 2023 Tech&amp;amp;Fin

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the &quot;Software&quot;), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 라이센스 파일은 MIT 라이센스로 자유롭게 사용할 수 있도록 할 예정이며 LICENSE라는 파일을 하나 만들어서 위의 내용과 같이 대략적인 내용을 작성해 두면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1716530016871&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[python@instance-technfin technfin-bot]$ cat README.md
# Cobot - Coin Bot
[![license](https://img.shields.io/badge/license-MIT-blue)](/LICENSE)
&amp;gt; Coin Bot made by Tech&amp;amp;Fin Korea 

파이썬 기반 암호화폐 자동매매 프로그램. https://technfin.tistory.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;README.md 파일은 위와 비슷하게 작성하면 됩니다. md 확장자는 Mark Down 문법을 사용하는 문서로 Git-Hub에 해당 파일을 올리면 보기좋은 모양으로 상세 설명을 보여줄 수 있습니다. 마크다운 문법은 인터넷에 검색해보면 자세히 설명되어 있으니 참고 부탁 드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1716530189324&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[python@instance-technfin technfin-bot]$ cat requirements.txt 
APScheduler==3.6.3
asyncio==3.4.3
cachetools==4.2.2
certifi==2021.10.8
charset-normalizer==2.0.10
colorlog==6.7.0
configparser==5.2.0
gevent==22.10.2
greenlet==2.0.2
idna==3.3
numpy==1.22.0
pandas==1.3.5
Pillow==9.1.0
podman-compose==1.0.6
psycopg2-binary==2.9.3
PyJWT==2.3.0
python-dateutil==2.8.2
python-dotenv==1.0.0
python-telegram-bot==13.10
pytz==2021.3
pytz-deprecation-shim==0.1.0.post0
PyYAML==6.0.1
requests==2.27.1
six==1.16.0
torch==1.10.1
torchaudio==0.10.1
torchvision==0.11.2
tornado==6.1
typing_extensions==4.2.0
tzdata==2021.5
tzlocal==4.1
urllib3==1.26.8
websockets==10.1
zope.event==4.6
zope.interface==5.5.2
[python@instance-technfin technfin-bot]$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;requirements.txt 파일은 일단 위와 같이 작성하겠습니다. 실제로는 현재 작동되는 프로젝트에서 freeze 명령어를 통해 requirements.txt 파일을 만드는건데 현재는 새로운 프로젝트를 만드는 과정이니 제가 사용했던 requirements.txt 파일을 이용해 보도록 하겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;나머지 폴더 구조 만들기&lt;/h2&gt;
&lt;pre id=&quot;code_1716530590450&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[python@instance-technfin technfin-bot]$ tree -L 4 -I &quot;__pycache__|__init__.py&quot;
.
├── cobot
│   ├── bithumb_ws_ticker.py
│   ├── env
│   │   └── config.yaml
│   └── resources
│       └── bithumb
│           ├── client.py
│           ├── constants.py
│           ├── database.py
│           └── exceptions.py
├── LICENSE
├── README.md
└── requirements.txt

4 directories, 9 files
[python@instance-technfin technfin-bot]$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조금전에 만든 베이스 폴더 아래에 cobot이라는 폴더를 만들고 해당 폴더에 bithumb_ws_ticker.py라는 파이썬 파일을 만들어서 빗썸 웹소켓에 접속하여 시세를 수신하는 프로그램을 만들어 보겠습니다.&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;env 폴더에는 config.yaml 이라는 야믈 파일을 이용해서 각종 API Key와 같은 환경 설정에 필요한 정보들을 안전하게 보관할 예정입니다.&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;다음으로는 resources 폴더 아래에 각 거래소별 폴더를 만들겠습니다. 우선 bithumb을 만들고 향후 upbit 및 binance와 같은 폴더를 추가해 나가도록 하겠습니다.&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;각 거래소 별 폴더 아래에는 client.py 파일을 이용해 거래소 API를 활용하는 파이썬 프로그램을 작성하고 constants.py에서 상수 관리를 하려고 합니다.&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;이어서 database.py 파일에는 각종 데이터베이스에 접속해서 사용하는 모듈을 만들 예정이고 exceptions.py 파일을 통해 에러 처리를 컨트롤할 예정입니다.&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;마치며&lt;/h2&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;아래 링크를 통해 Tech&amp;amp;Fin Korea의 공식 텔레그램 채널에 입장하시면 향후 도움을 받으실 수 있으니 참고 부탁 드립니다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://t.me/technfinkorea&quot;&gt;https://t.me/technfinkorea&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1716531108879&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;Tech&amp;amp;Fin Korea&quot; data-og-description=&quot;테크앤핀코리아 구독자 소통을 위한 공식 공개 채널입니다.&quot; data-og-host=&quot;t.me&quot; data-og-source-url=&quot;https://t.me/technfinkorea&quot; data-og-url=&quot;https://t.me/technfinkorea&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/o8cN7/hyV9SLm0a1/BcDhJc602STLZBoWiAogMk/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/bSjLIw/hyV9TjcrRl/QKLKNVr95Bs3Duc1V1pje0/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320&quot;&gt;&lt;a href=&quot;https://t.me/technfinkorea&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://t.me/technfinkorea&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/o8cN7/hyV9SLm0a1/BcDhJc602STLZBoWiAogMk/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/bSjLIw/hyV9TjcrRl/QKLKNVr95Bs3Duc1V1pje0/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320');&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;Tech&amp;amp;Fin Korea&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;테크앤핀코리아 구독자 소통을 위한 공식 공개 채널입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;t.me&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>프로젝트/비트코인 자동매매</category>
      <category>비트코인봇</category>
      <category>비트코인자동매매</category>
      <category>비트코인자동매매만들기</category>
      <category>트레이딩봇</category>
      <category>파이썬구조잡기</category>
      <category>파이썬봇</category>
      <category>파이썬비트코인</category>
      <category>파이썬을이용한비트코인자동매매</category>
      <category>파이썬폴더구조</category>
      <category>파이썬프로젝트구조</category>
      <author>Tech&amp;amp;Fin</author>
      <guid isPermaLink="true">https://technfin.tistory.com/120</guid>
      <comments>https://technfin.tistory.com/entry/%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8-%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4-%EC%8B%9C%EC%A6%8C2-2-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%8F%B4%EB%8D%94-%EA%B5%AC%EC%A1%B0-%EC%84%A4%EB%AA%85#entry120comment</comments>
      <pubDate>Fri, 24 May 2024 15:13:31 +0900</pubDate>
    </item>
    <item>
      <title>[비트코인 자동매매 시즌2] #1 - 개발 환경 설명 및 설정</title>
      <link>https://technfin.tistory.com/entry/%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8-%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4-%EC%8B%9C%EC%A6%8C2-1-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EC%84%A4%EC%A0%95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20240510_비트코인자동매매_개발환경.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOjdvt/btsHkisAclH/Kgv8WVTLhoiDZmrfvo5b91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOjdvt/btsHkisAclH/Kgv8WVTLhoiDZmrfvo5b91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOjdvt/btsHkisAclH/Kgv8WVTLhoiDZmrfvo5b91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOjdvt%2FbtsHkisAclH%2FKgv8WVTLhoiDZmrfvo5b91%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;960&quot; height=&quot;540&quot; data-filename=&quot;20240510_비트코인자동매매_개발환경.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;odyssey-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차 - 클릭하면 이동합니다.&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시작하기 전에&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 부터 차근차근 비트코인 자동매매 시즌2 연재를 시작해 보려고 합니다. 시작하기 전에 시즌2에서 다루고자 하는 내용 및 목표에 대해서 잠시 말씀 드리려고 합니다.&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;이번 시즌2에서는 먼저 조금 더 구조화를 갖춘 상태에서 파이썬을 활용해서 비트코인 자동매매를 구현할 수 있는 기본 모듈 및 체계를 잡아가는 과정을 설명 드릴 예정이며 웹소켓 등을 활용해서 웹 서비스를 만들어서 시세를 보여주는 웹 페이지를 만들어 보는 과정을 다뤄 보려고 합니다.&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;h2 data-ke-size=&quot;size26&quot;&gt;개발 환경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시즌2의 개발 환경은 크게 아래와 같이 진행해 보려고 하는데요. 사실 꼭 같은 툴이나 환경을 사용할 필요는 없습니다. 다만 개발이 처음이시거나 경험이 많지 않은 분들을 위해 제가 사용하는 환경에 대해서 가급적 자세히 차근차근 설명해 드리고자 하오니 익숙하신 분들은 참고만 하셔도 좋을 것 같습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로컬 vs 서버 개발&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전 시즌1에서는 로컬 PC에서 개발을 진행 했었는데요. 원래 원칙대로라면, 혹은 여러명이 개발을 동시에 협업을 하면서 진행하는 경우에는 각자 로컬에서 개발을 진행하는 것이 올바른 방법이라고 생각 합니다.&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;그래서 이번 시즌2에서는 혼자 개발을 진행한다는 가정하에 서버에서 직접 개발을 하는 것으로 진행해 보려고 합니다. 서버에서 개발하게 되면 별도로 프로그램을 로컬에서 서버로 이동할 필요가 없게 되며, 간혹 로컬 개발 환경이 집인 경우에 그리고 고정 IP를 사용하지 않는 경우에 많지는 않겠지만 IP가 변경되는 경우에도 서버 IP만 등록해 두면 되기 때문에 불편이 사라지게 됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용 언어&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 파이썬을 사용해서 서버에서 구동되는 메인 프로세스들을 만들 예정이며 PostgreSQL 데이터베이스를 사용해서 데이터베이스에 적재하는 것을 다뤄 보려고 합니다.&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;이어서 거래소 웹소켓 API를 사용해서 실시간 코인 가격을 보여주는 웹 페이지를 만드는 과정을 진행할 예정인데 그 때는 자바스크립트를 사용해서 개발을 진행해 볼 예정입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개발환경 설정&lt;/h3&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;AWS, 네이버 등 어떤 클라우드 서버라도 사실 상관은 없으나 OS는 Linux로 맞춰 주시는 것이 향후 포스팅을 따라오실때 유리하며 제 포스팅에서는 비용이 들지 않는 무료 오라클 클라우드를 사용하고 있으니 참고하시면 좋을 것 같습니다.&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;a href=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%AC%B4%EB%A3%8C-%EA%B0%80%EC%9E%85-%EC%98%A4%EB%A5%98-%EB%B0%8F-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2021.06.02 - [코딩스토리/클라우드 서버] - 오라클 클라우드 무료 가입 - 오류 및 주의사항&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715325245683&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;오라클 클라우드 무료 가입 - 오류 및 주의사항&quot; data-og-description=&quot;이번 시간에는 무료로 사용할 수 있는 클라우드 서버 중 하나인 오라클 클라우드를 무료 가입하는 방법과 참고할 사항에 대해서 살펴 보겠습니다. 무료로 클라우드 서버를 이용할 수 있는 업체&quot; data-og-host=&quot;technfin.tistory.com&quot; data-og-source-url=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%AC%B4%EB%A3%8C-%EA%B0%80%EC%9E%85-%EC%98%A4%EB%A5%98-%EB%B0%8F-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD&quot; data-og-url=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%AC%B4%EB%A3%8C-%EA%B0%80%EC%9E%85-%EC%98%A4%EB%A5%98-%EB%B0%8F-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ynf0H/hyV2BQeCkH/5jPcABZyQ9AsptZLtejNf1/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bgVrDS/hyV2BvWx9G/XdzFlVmZdgbkUByekuM9QK/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bAyfKX/hyV2o4qfz9/pJzq1xvMODSDTtLMNFcZLk/img.png?width=1920&amp;amp;height=969&amp;amp;face=0_0_1920_969&quot;&gt;&lt;a href=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%AC%B4%EB%A3%8C-%EA%B0%80%EC%9E%85-%EC%98%A4%EB%A5%98-%EB%B0%8F-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%AC%B4%EB%A3%8C-%EA%B0%80%EC%9E%85-%EC%98%A4%EB%A5%98-%EB%B0%8F-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ynf0H/hyV2BQeCkH/5jPcABZyQ9AsptZLtejNf1/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bgVrDS/hyV2BvWx9G/XdzFlVmZdgbkUByekuM9QK/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bAyfKX/hyV2o4qfz9/pJzq1xvMODSDTtLMNFcZLk/img.png?width=1920&amp;amp;height=969&amp;amp;face=0_0_1920_969');&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;오라클 클라우드 무료 가입 - 오류 및 주의사항&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번 시간에는 무료로 사용할 수 있는 클라우드 서버 중 하나인 오라클 클라우드를 무료 가입하는 방법과 참고할 사항에 대해서 살펴 보겠습니다. 무료로 클라우드 서버를 이용할 수 있는 업체&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;technfin.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2021.06.03 - [코딩스토리/클라우드 서버] - 오라클 클라우드 인스턴스 생성 - 서버 만들기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715327366255&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;오라클 클라우드 인스턴스 생성 - 서버 만들기&quot; data-og-description=&quot;오라클 클라우드 프리티어(무료버전)에 무사히 가입을 완료하셨다면 이제 앞으로 사용할 서버를 할당 받기 위해 서버 인스턴스를 생성해야 합니다. 아직 오라클 클라우드에 가입하지 않으셨다&quot; data-og-host=&quot;technfin.tistory.com&quot; data-og-source-url=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot; data-og-url=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/INHl7/hyV2AKyLKc/ylJGKlXXQ4G6uoOxlgI0L1/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bpxVVW/hyV2rmywt5/NgXwy07T3aSfSKMmDoTFN0/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bRZSLm/hyV2ylGnHs/e8qsdNflCcdQV9FckhIeK1/img.png?width=1231&amp;amp;height=578&amp;amp;face=0_0_1231_578&quot;&gt;&lt;a href=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/INHl7/hyV2AKyLKc/ylJGKlXXQ4G6uoOxlgI0L1/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bpxVVW/hyV2rmywt5/NgXwy07T3aSfSKMmDoTFN0/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bRZSLm/hyV2ylGnHs/e8qsdNflCcdQV9FckhIeK1/img.png?width=1231&amp;amp;height=578&amp;amp;face=0_0_1231_578');&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;오라클 클라우드 인스턴스 생성 - 서버 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;오라클 클라우드 프리티어(무료버전)에 무사히 가입을 완료하셨다면 이제 앞으로 사용할 서버를 할당 받기 위해 서버 인스턴스를 생성해야 합니다. 아직 오라클 클라우드에 가입하지 않으셨다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;technfin.tistory.com&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;
&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;서버가 생성 되었다면 앞으로 서버에서 개발을 진행할 툴인 VS Code를 설치하고 서버 개발을 연결하면 됩니다. 아래 내용을 참고하면 좋습니다.&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;a href=&quot;https://technfin.tistory.com/entry/VS-Code%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-SSH-%EC%9B%90%EA%B2%A9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EB%B0%8F-pem-%ED%8C%8C%EC%9D%BC-%EA%B6%8C%ED%95%9C-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.11.17 - [코딩스토리/개발관련] - VS Code를 사용한 파이썬 SSH 원격 개발 환경 설정 및 pem 파일 권한 관련 오류 해결 방법&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715328101513&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;VS Code를 사용한 파이썬 SSH 원격 개발 환경 설정 및 pem 파일 권한 관련 오류 해결 방법&quot; data-og-description=&quot;목차 - 클릭하면 이동합니다. 파이썬 원격 개발 with VS Code 프로그램을 개발 할 때 보통은 자신의 PC, 즉 로컬 환경에서 개발 및 테스트를 진행하고 개발이 어느정도 완료되면 서버에 배포하여 실&quot; data-og-host=&quot;technfin.tistory.com&quot; data-og-source-url=&quot;https://technfin.tistory.com/entry/VS-Code%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-SSH-%EC%9B%90%EA%B2%A9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EB%B0%8F-pem-%ED%8C%8C%EC%9D%BC-%EA%B6%8C%ED%95%9C-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95&quot; data-og-url=&quot;https://technfin.tistory.com/entry/VS-Code%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-SSH-%EC%9B%90%EA%B2%A9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EB%B0%8F-pem-%ED%8C%8C%EC%9D%BC-%EA%B6%8C%ED%95%9C-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cE3epl/hyV2BioozF/3hpZx4udk3srIgZUKDbj30/img.png?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bd2GWw/hyV2x1olNI/XhKgcVOmGb83S4NQUaJIK0/img.png?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/hCpVg/hyV2owBcUO/8K1lsT45qIvdrACP8PyYAK/img.png?width=1339&amp;amp;height=647&amp;amp;face=0_0_1339_647&quot;&gt;&lt;a href=&quot;https://technfin.tistory.com/entry/VS-Code%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-SSH-%EC%9B%90%EA%B2%A9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EB%B0%8F-pem-%ED%8C%8C%EC%9D%BC-%EA%B6%8C%ED%95%9C-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://technfin.tistory.com/entry/VS-Code%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-SSH-%EC%9B%90%EA%B2%A9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EB%B0%8F-pem-%ED%8C%8C%EC%9D%BC-%EA%B6%8C%ED%95%9C-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cE3epl/hyV2BioozF/3hpZx4udk3srIgZUKDbj30/img.png?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bd2GWw/hyV2x1olNI/XhKgcVOmGb83S4NQUaJIK0/img.png?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/hCpVg/hyV2owBcUO/8K1lsT45qIvdrACP8PyYAK/img.png?width=1339&amp;amp;height=647&amp;amp;face=0_0_1339_647');&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;VS Code를 사용한 파이썬 SSH 원격 개발 환경 설정 및 pem 파일 권한 관련 오류 해결 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;목차 - 클릭하면 이동합니다. 파이썬 원격 개발 with VS Code 프로그램을 개발 할 때 보통은 자신의 PC, 즉 로컬 환경에서 개발 및 테스트를 진행하고 개발이 어느정도 완료되면 서버에 배포하여 실&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;technfin.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리&lt;/h3&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 style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아울러 소통을 위한 텔레그램 채널을 만들었으니 관심 있으신 분들께서는 아래 링크를 통해 텔레그램 채널에 입장 부탁 드리겠습니다. 감사합니다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #3d62ce;&quot; href=&quot;https://t.me/technfinkorea&quot;&gt;https://t.me/technfinkorea&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715328200847&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;Tech&amp;amp;Fin Korea&quot; data-og-description=&quot;테크앤핀코리아 구독자 소통을 위한 공식 공개 채널입니다.&quot; data-og-host=&quot;t.me&quot; data-og-source-url=&quot;https://t.me/technfinkorea&quot; data-og-url=&quot;https://t.me/technfinkorea&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wmbgf/hyV2qHXCrb/f5cF1nFDSqFVhCKCdvNXPK/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/cTrSdM/hyV2oQTCEo/iC2bFgW9sBvJ8fpBuRvWL1/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/en4v5g/hyV2pPN7mO/fzaUKim3DuEpRKwJFk4Wt0/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320&quot;&gt;&lt;a href=&quot;https://t.me/technfinkorea&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://t.me/technfinkorea&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wmbgf/hyV2qHXCrb/f5cF1nFDSqFVhCKCdvNXPK/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/cTrSdM/hyV2oQTCEo/iC2bFgW9sBvJ8fpBuRvWL1/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/en4v5g/hyV2pPN7mO/fzaUKim3DuEpRKwJFk4Wt0/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320');&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;Tech&amp;amp;Fin Korea&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;테크앤핀코리아 구독자 소통을 위한 공식 공개 채널입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;t.me&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>프로젝트/비트코인 자동매매</category>
      <category>개발환경세팅</category>
      <category>비트코인</category>
      <category>비트코인자동매매</category>
      <category>비트코인자동매매개발환경</category>
      <category>비트코인파이썬</category>
      <category>자동매매</category>
      <category>파이썬</category>
      <category>파이썬개발환경</category>
      <category>파이썬비트코인자동매매</category>
      <category>파이썬자동매매</category>
      <author>Tech&amp;amp;Fin</author>
      <guid isPermaLink="true">https://technfin.tistory.com/119</guid>
      <comments>https://technfin.tistory.com/entry/%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8-%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4-%EC%8B%9C%EC%A6%8C2-1-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EC%84%A4%EC%A0%95#entry119comment</comments>
      <pubDate>Fri, 10 May 2024 17:04:15 +0900</pubDate>
    </item>
    <item>
      <title>비트코인 자동매매 프로그램 만들기 시즌2 안내</title>
      <link>https://technfin.tistory.com/entry/%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8-%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%8B%9C%EC%A6%8C2-%EC%95%88%EB%82%B4</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20240430_비트코인자동매매_시즌2.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cW07v0/btsG5tsaVnC/phOlmeXKyXzgSzkgMccpf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cW07v0/btsG5tsaVnC/phOlmeXKyXzgSzkgMccpf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cW07v0/btsG5tsaVnC/phOlmeXKyXzgSzkgMccpf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcW07v0%2FbtsG5tsaVnC%2FphOlmeXKyXzgSzkgMccpf1%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;960&quot; height=&quot;540&quot; data-filename=&quot;20240430_비트코인자동매매_시즌2.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;odyssey-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차 - 클릭하면 이동합니다.&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;비트코인 자동매매 프로그램 시즌2 안내&lt;/h2&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;이번에 조금 더 업그레이드 된 버전으로 시즌2를 진행해 보려고 합니다. 우선적으로는 파이썬을 조금 더 구조화 하여 작성해 볼 예정이고 구독자 분들과 소통을 통해 전략을 만들어가며 하나의 프로덕트를 완성해 보려고 합니다.&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;h2 data-ke-size=&quot;size26&quot;&gt;추가 안내&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비트코인은 이제 현물 ETF 승인을 통해 점점 제도권에 안착하려고 하는 모습을 보이고 있습니다. 비트코인을 자동으로 매매하는 프로그램은 단순 자동매매 봇을 넘어 이미 해외에서는 여러가지 서비스로 제공이 되고 있으며 국내에도 소수의 업체가 시도를 하고 있는 상황입니다.&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;/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://t.me/technfinkorea&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://t.me/technfinkorea&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1714456183753&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;Tech&amp;amp;Fin Korea&quot; data-og-description=&quot;테크앤핀코리아 구독자 소통을 위한 공식 공개 채널입니다.&quot; data-og-host=&quot;t.me&quot; data-og-source-url=&quot;https://t.me/technfinkorea&quot; data-og-url=&quot;https://t.me/technfinkorea&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b9saS7/hyVZpBwXO5/P2y0c8xuzj3BCiywgXHZwk/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/bvTFAX/hyVVzeMLdL/WtYN0Fk4OTOCeyJYAm7l30/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/rCrRM/hyVZih6YHn/XaDKZwl5R6LZkma6nKMygK/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320&quot;&gt;&lt;a href=&quot;https://t.me/technfinkorea&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://t.me/technfinkorea&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b9saS7/hyVZpBwXO5/P2y0c8xuzj3BCiywgXHZwk/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/bvTFAX/hyVVzeMLdL/WtYN0Fk4OTOCeyJYAm7l30/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/rCrRM/hyVZih6YHn/XaDKZwl5R6LZkma6nKMygK/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320');&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;Tech&amp;amp;Fin Korea&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;테크앤핀코리아 구독자 소통을 위한 공식 공개 채널입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;t.me&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>
      <category>비트코인봇</category>
      <category>비트코인봇만들기</category>
      <category>비트코인자동매매</category>
      <category>비트코인자동매매스타트업</category>
      <category>비트코인파이썬</category>
      <category>코봇</category>
      <category>코인봇</category>
      <category>코인자동매매스타트업</category>
      <category>코인자동매매프로그램</category>
      <category>파이썬비트코인</category>
      <author>Tech&amp;amp;Fin</author>
      <guid isPermaLink="true">https://technfin.tistory.com/118</guid>
      <comments>https://technfin.tistory.com/entry/%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8-%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%8B%9C%EC%A6%8C2-%EC%95%88%EB%82%B4#entry118comment</comments>
      <pubDate>Tue, 30 Apr 2024 14:53:25 +0900</pubDate>
    </item>
    <item>
      <title>NextJS - Layout.tsx Props Invaild 에러</title>
      <link>https://technfin.tistory.com/entry/NextJS-Layouttsx-Props-Invaild-%EC%97%90%EB%9F%AC</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20240216_NextJS_PropsInvalidError.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgtbry/btsEXos1I8F/utT51tK50P0voNbSIKnO1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgtbry/btsEXos1I8F/utT51tK50P0voNbSIKnO1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgtbry/btsEXos1I8F/utT51tK50P0voNbSIKnO1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgtbry%2FbtsEXos1I8F%2FutT51tK50P0voNbSIKnO1K%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;960&quot; height=&quot;540&quot; data-filename=&quot;20240216_NextJS_PropsInvalidError.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;odyssey-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차 - 클릭하면 이동합니다.&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;NextJS - Layout.tsx - Props Invaild Error 발생&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NextJS의 최신 버전으로 프로젝트를 만들기 위해 2024.02.16일 기준 NextJS 최신 버전인 14.1.0을 이용해서 프로젝트를 생성하는 도중 아래와 같은 에러가 발생하였습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1708043693207&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[web@instance-technfin c-app]$ yarn build
   ▲ Next.js 14.1.0

   Creating an optimized production build ...
 ✓ Compiled successfully
   Linting and checking validity of types  ..Failed to compile.

src/app/[locale]/layout.tsx
Type error: Layout &quot;src/app/[locale]/layout.tsx&quot; has an invalid &quot;default&quot; export:
  Type &quot;AppLayoutProps&quot; is not valid.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다국어 페이지를 지원하기 위해 Next-Intl을 추가한 것 외에는 소스 추가가 많지 않은 상태이기 때문에 Layout.tsx의 소스코드는 아래와 같이 매우 간단한 상태입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1708043790058&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { ReactNode } from &quot;react&quot;;
import type { Metadata, Viewport } from &quot;next&quot;;

//** Next-Intl */
import { NextIntlClientProvider, useMessages } from &quot;next-intl&quot;;

interface AppLayoutProps {
  children: ReactNode;
  locale: string;
}

export const metadata: Metadata = {
  title: &quot;C-App&quot;,
  description: &quot;The C-App for you.&quot;,
  icons: {
    icon: &quot;/favicon.ico&quot;,
  },
};

export const viewport: Viewport = { initialScale: 1, width: &quot;device-width&quot; };

export default function AppLayout({ children, locale }: AppLayoutProps) {
  //* Get all messages
  const messages = useMessages();

  return (
    &amp;lt;html lang={locale}&amp;gt;
      &amp;lt;body&amp;gt;
        &amp;lt;NextIntlClientProvider locale={locale} messages={messages}&amp;gt;
          {children}
        &amp;lt;/NextIntlClientProvider&amp;gt;
      &amp;lt;/body&amp;gt;
    &amp;lt;/html&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발 모드에서는 발생하지 않고 build 시에만 발생하는 것으로 보아 코드상 문제는 없는듯 싶고 에러 메세지에서도 나오듯이 Linting Checking시 Type에 대하여 검증하다가 발생한 오류일 가능성이 높아 보입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;열심히 구글링을 해본 결과 NextJS의 App Router를 사용하는 경우 Layout.tsx의 Props에는 children외에 임의의 Props를 설정하면 에러가 발생하는 것 같았습니다.&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;하지만 Next-Intl을 사용하기 위해서는 locale 정보를 Props에 넘겨야 하는 상황이었기에 확인해보니 params 형태로 넘기면 가능할 것 같다는 부분을 확인하였습니다.&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;locale을 직접 넘기는 방법 대신 params를 이용하여 아래와 같이 변경하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708045766779&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { ReactNode } from &quot;react&quot;;
import type { Metadata, Viewport } from &quot;next&quot;;

//** Next-Intl */
import { NextIntlClientProvider, useMessages } from &quot;next-intl&quot;;

interface AppLayoutProps {
  children: ReactNode;
  params: { locale: string };
}

export const metadata: Metadata = {
  title: &quot;C-App&quot;,
  description: &quot;The C-App for you.&quot;,
  icons: {
    icon: &quot;/favicon.ico&quot;,
  },
};

export const viewport: Viewport = { initialScale: 1, width: &quot;device-width&quot; };

export default function AppLayout({
  children,
  params: { locale },
}: AppLayoutProps) {
  //* Get all messages
  const messages = useMessages();

  return (
    &amp;lt;html lang={locale}&amp;gt;
      &amp;lt;body&amp;gt;
        &amp;lt;NextIntlClientProvider locale={locale} messages={messages}&amp;gt;
          {children}
        &amp;lt;/NextIntlClientProvider&amp;gt;
      &amp;lt;/body&amp;gt;
    &amp;lt;/html&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1708045821936&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[web@instance-technfin c-app]$ yarn build
   ▲ Next.js 14.1.0

   Creating an optimized production build ...
 ✓ Compiled successfully
 ✓ Linting and checking validity of types    
 ✓ Collecting page data    
 ✓ Generating static pages (4/4) 
 ✓ Collecting build traces    
 ✓ Finalizing page optimization    

Route (app)                              Size     First Load JS
┌ ○ /_not-found                          885 B            85 kB
└ &amp;lambda; /[locale]                            927 B          85.1 kB
+ First Load JS shared by all            84.1 kB
  ├ chunks/69-1b6d135f94ac0e36.js        28.9 kB
  ├ chunks/fd9d1056-cc48c28d170fddc2.js  53.4 kB
  └ other shared chunks (total)          1.83 kB


&amp;fnof; Middleware                             49.5 kB

○  (Static)   prerendered as static content
&amp;lambda;  (Dynamic)  server-rendered on demand using Node.js&lt;/code&gt;&lt;/pre&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&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yRqWu/btsEVM89e0o/w9XuimNka5CPxr9bCXdU10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yRqWu/btsEVM89e0o/w9XuimNka5CPxr9bCXdU10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yRqWu/btsEVM89e0o/w9XuimNka5CPxr9bCXdU10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyRqWu%2FbtsEVM89e0o%2Fw9XuimNka5CPxr9bCXdU10%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;535&quot; height=&quot;253&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cw93tu/btsES9dhhyo/de2e5pf3AsZBCSNeW9SIK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cw93tu/btsES9dhhyo/de2e5pf3AsZBCSNeW9SIK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cw93tu/btsES9dhhyo/de2e5pf3AsZBCSNeW9SIK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcw93tu%2FbtsES9dhhyo%2Fde2e5pf3AsZBCSNeW9SIK0%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;707&quot; height=&quot;300&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;/figure&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;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NextJS 13 이후로 App Router 방식이 적용 되었는데 이전 12 버전의 Page Router 방식과는 변화가 많이 생긴 것 같습니다.&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;NextJS 12는 이미 서비스가 종료된 것으로 알고 있기 때문에 계속해서 사용하기 보다는 13 또는 최신 버전인 14로 업그레이드를 하는 것을 추천 드립니다.&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;</description>
      <category>코딩스토리/개발관련</category>
      <category>invalid default export</category>
      <category>Layout.tsx</category>
      <category>LayoutPropsInvaild</category>
      <category>Next-Intl</category>
      <category>nextjs</category>
      <category>NextJSProps오류</category>
      <category>NextJS오류</category>
      <category>PropsInvaild</category>
      <category>Props오류</category>
      <category>넥스트js</category>
      <author>Tech&amp;amp;Fin</author>
      <guid isPermaLink="true">https://technfin.tistory.com/117</guid>
      <comments>https://technfin.tistory.com/entry/NextJS-Layouttsx-Props-Invaild-%EC%97%90%EB%9F%AC#entry117comment</comments>
      <pubDate>Fri, 16 Feb 2024 10:23:21 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 RPM DB Error - db5 error(-30973)</title>
      <link>https://technfin.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-RPM-DB-Error-db5-error-30973</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20240215_Linux_RPM_Error.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciLJ9o/btsEQcasOAm/hIrfOpUpSsKT9YCOiqduDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciLJ9o/btsEQcasOAm/hIrfOpUpSsKT9YCOiqduDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciLJ9o/btsEQcasOAm/hIrfOpUpSsKT9YCOiqduDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciLJ9o%2FbtsEQcasOAm%2FhIrfOpUpSsKT9YCOiqduDk%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;960&quot; height=&quot;540&quot; data-filename=&quot;20240215_Linux_RPM_Error.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;odyssey-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차 - 클릭하면 이동합니다.&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스 RPM DB Error&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간혹 어떤 사유인지는 파악하기 어렵지만 리눅스의 rpm db가 깨진 경우 dnf update가 정상적으로 이루어지지 않는 경우가 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1707977065969&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[web@instance-technfin ~]$ sudo dnf update
error: rpmdb: BDB0113 Thread/process 3692420/281457585117760 failed: BDB1507 Thread died in Berkeley DB library
error: db5 error(-30973) from dbenv-&amp;gt;failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db5 -  (-30973)
error: cannot open Packages database in /var/lib/rpm
Error: Error: rpmdb open failed&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스의 커널 등을 업데이트 해서 최신화를 해야 하는데 업데이트를 위한 rpm 저장소의 database가 깨진 경우이며, 위와 같은 경우가 발생하면 rpm db를 rebuild하면 해결이 가능합니다.&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;RPM DB Rebuild&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 깨진 DB를 찾아보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1707977180912&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[web@instance-technfin ~]$ cd /var/lib
[web@instance-technfin lib]$ cd rpm
[web@instance-technfin rpm]$ ls -rlt
total 269212
-rw-r--r--. 1 root root     32768 Oct 14  2021 Enhancename
-rw-r--r--. 1 root root     32768 Nov 22 10:01 Supplementname
-rw-r--r--. 1 root root     32768 Dec 15 02:37 Transfiletriggername
-rw-r--r--. 1 root root     32768 Dec 15 02:37 Filetriggername
-rw-r--r--. 1 root root     32768 Jan 28 12:46 Suggestname
-rw-r--r--. 1 root root     32768 Jan 28 12:46 Triggername
-rw-r--r--. 1 root root     32768 Feb  1 21:22 Conflictname
-rw-r--r--. 1 root root 245170176 Feb  3 00:28 Packages
-rw-r--r--. 1 root root     65536 Feb  3 00:28 Name
-rw-r--r--. 1 root root     32768 Feb  3 00:28 Group
-rw-r--r--. 1 root root  13975552 Feb  3 00:28 Basenames
-rw-r--r--. 1 root root    409600 Feb  3 00:28 Requirename
-rw-r--r--. 1 root root   2654208 Feb  3 00:28 Providename
-rw-r--r--. 1 root root     32768 Feb  3 00:28 Obsoletename
-rw-r--r--. 1 root root  11108352 Feb  3 00:28 Dirnames
-rw-r--r--. 1 root root     32768 Feb  3 00:28 Installtid
-rw-r--r--. 1 root root     32768 Feb  3 00:28 Recommendname
-rw-r--r--. 1 root root     98304 Feb  3 00:28 Sigmd5
-rw-r--r--. 1 root root    163840 Feb  3 00:28 Sha1header
-rw-r--r--. 1 root root   1318912 Feb 15 08:35 __db.003
-rw-r--r--. 1 root root    278528 Feb 15 08:35 __db.002
-rw-r--r--. 1 root root   1064960 Feb 15 08:35 __db.001&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제일 아래 __db.001 ~ 003 이 rpm DB이며 이 파일들이 손상되었을 가능성이 높습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1707977226862&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[web@instance-technfin rpm]$ sudo mkdir /tmp/bak
[web@instance-technfin rpm]$ sudo mv /var/lib/rpm/__db* /tmp/bak/.
[web@instance-technfin rpm]$ sudo rpmdb --rebuilddb&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 파일을 백업하고 rpmdb --rebuilddb 명령어를 통해 DB를 재생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1707977264406&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[web@instance-technfin rpm]$ sudo dnf update
Last metadata expiration check: 3:16:04 ago on Thu 15 Feb 2024 05:20:58 AM KST.
Dependencies resolved.
================================================================================================= Package            Arch    Version                                     Repository          Size
=================================================================================================Installing:
 kernel-uek         aarch64 5.4.17-2136.328.3.el8uek                    ol8_baseos_latest  118 M
 kernel-uek-debug-devel
                    aarch64 5.4.17-2136.328.3.el8uek                    ol8_baseos_latest   19 M
 kernel-uek-devel   aarch64 5.4.17-2136.328.3.el8uek                    ol8_baseos_latest   19 M
Upgrading:
 aardvark-dns       aarch64 2:1.7.0-1.module+el8.9.0+90147+a4870853     ol8_appstream      994 k
 conmon             aarch64 3:2.1.8-1.module+el8.9.0+90147+a4870853     ol8_appstream       53 k
 container-selinux  noarch  2:2.221.0-1.module+el8.9.0+90147+a4870853   ol8_appstream       68 k
 containernetworking-plugins
                    aarch64 1:1.3.0-8.0.1.module+el8.9.0+90147+a4870853 ol8_appstream       19 M
 containers-common  aarch64 2:1-70.0.2.module+el8.9.0+90147+a4870853    ol8_appstream       88 k
 criu               aarch64 3.18-4.module+el8.9.0+90147+a4870853        ol8_appstream      522 k
 fuse-overlayfs     aarch64 1.12-1.module+el8.9.0+90147+a4870853        ol8_appstream       63 k
 gnutls             aarch64 3.6.16-8.el8_9.1                            ol8_baseos_latest  938 k
 jq                 aarch64 1.6-7.0.3.el8                               ol8_appstream      189 k
 kexec-tools        aarch64 2.0.26-8.0.2.el8                            ol8_baseos_latest  491 k
 libmaxminddb       aarch64 1.2.0-10.el8_9.1                            ol8_appstream       32 k
 libnfsidmap        aarch64 1:2.3.3-59.0.1.el8                          ol8_baseos_latest  120 k
 libslirp           aarch64 4.4.0-1.module+el8.9.0+90147+a4870853       ol8_appstream       65 k
 netavark           aarch64 2:1.7.0-2.module+el8.9.0+90147+a4870853     ol8_appstream      3.6 M
 nfs-utils          aarch64 1:2.3.3-59.0.1.el8                          ol8_baseos_latest  506 k
 podman             aarch64 3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853 ol8_appstream       14 M
 podman-catatonit   aarch64 3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853 ol8_appstream      311 k
 podman-docker      noarch  3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853 ol8_appstream      109 k
 podman-gvproxy     aarch64 3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853 ol8_appstream      3.3 M
 podman-plugins     aarch64 3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853 ol8_appstream      1.1 M
 python3-rpm        aarch64 4.14.3-28.0.2.el8_9                         ol8_baseos_latest  156 k
 rpm                aarch64 4.14.3-28.0.2.el8_9                         ol8_baseos_latest  543 k
 rpm-build-libs     aarch64 4.14.3-28.0.2.el8_9                         ol8_baseos_latest  151 k
 rpm-libs           aarch64 4.14.3-28.0.2.el8_9                         ol8_baseos_latest  330 k
 rpm-plugin-selinux aarch64 4.14.3-28.0.2.el8_9                         ol8_baseos_latest   77 k
 rpm-plugin-systemd-inhibit
                    aarch64 4.14.3-28.0.2.el8_9                         ol8_baseos_latest   78 k
 runc               aarch64 1:1.1.12-1.module+el8.9.0+90147+a4870853    ol8_appstream      2.7 M
 slirp4netns        aarch64 1.2.1-1.module+el8.9.0+90147+a4870853       ol8_appstream       54 k
 sos                noarch  4.6.1-1.0.1.el8                             ol8_baseos_latest  899 k
 sudo               aarch64 1.9.5p2-1.el8_9                             ol8_baseos_latest  1.0 M
 tcpdump            aarch64 14:4.9.3-3.el8_9.1                          ol8_appstream      436 k
 tzdata             noarch  2024a-1.0.1.el8                             ol8_baseos_latest  474 k
Removing:
 kernel-uek         aarch64 5.4.17-2136.325.5.1.el8uek                  @ol8_baseos_latest 205 M
 kernel-uek-debug-devel
                    aarch64 5.4.17-2136.325.5.1.el8uek                  @ol8_baseos_latest  74 M
 kernel-uek-devel   aarch64 5.4.17-2136.325.5.1.el8uek                  @ol8_baseos_latest  74 M

Transaction Summary
=================================================================================================Install   3 Packages
Upgrade  32 Packages
Remove    3 Packages

Total size: 208 M
Is this ok [y/N]: y
Downloading Packages:
[SKIPPED] kernel-uek-5.4.17-2136.328.3.el8uek.aarch64.rpm: Already downloaded                   
[SKIPPED] kernel-uek-debug-devel-5.4.17-2136.328.3.el8uek.aarch64.rpm: Already downloaded       
[SKIPPED] kernel-uek-devel-5.4.17-2136.328.3.el8uek.aarch64.rpm: Already downloaded             
[SKIPPED] gnutls-3.6.16-8.el8_9.1.aarch64.rpm: Already downloaded                               
[SKIPPED] kexec-tools-2.0.26-8.0.2.el8.aarch64.rpm: Already downloaded                          
[SKIPPED] libnfsidmap-2.3.3-59.0.1.el8.aarch64.rpm: Already downloaded                          
[SKIPPED] nfs-utils-2.3.3-59.0.1.el8.aarch64.rpm: Already downloaded                            
[SKIPPED] python3-rpm-4.14.3-28.0.2.el8_9.aarch64.rpm: Already downloaded                       
[SKIPPED] rpm-4.14.3-28.0.2.el8_9.aarch64.rpm: Already downloaded                               
[SKIPPED] rpm-build-libs-4.14.3-28.0.2.el8_9.aarch64.rpm: Already downloaded                    
[SKIPPED] rpm-libs-4.14.3-28.0.2.el8_9.aarch64.rpm: Already downloaded                          
[SKIPPED] rpm-plugin-selinux-4.14.3-28.0.2.el8_9.aarch64.rpm: Already downloaded                
[SKIPPED] rpm-plugin-systemd-inhibit-4.14.3-28.0.2.el8_9.aarch64.rpm: Already downloaded        
[SKIPPED] sos-4.6.1-1.0.1.el8.noarch.rpm: Already downloaded                                    
[SKIPPED] sudo-1.9.5p2-1.el8_9.aarch64.rpm: Already downloaded                                  
[SKIPPED] tzdata-2024a-1.0.1.el8.noarch.rpm: Already downloaded                                 
[SKIPPED] aardvark-dns-1.7.0-1.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded    
[SKIPPED] conmon-2.1.8-1.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded          
[SKIPPED] container-selinux-2.221.0-1.module+el8.9.0+90147+a4870853.noarch.rpm: Already downloaded
[SKIPPED] containernetworking-plugins-1.3.0-8.0.1.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded
[SKIPPED] containers-common-1-70.0.2.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded
[SKIPPED] criu-3.18-4.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded             
[SKIPPED] fuse-overlayfs-1.12-1.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded   
[SKIPPED] jq-1.6-7.0.3.el8.aarch64.rpm: Already downloaded                                      
[SKIPPED] libmaxminddb-1.2.0-10.el8_9.1.aarch64.rpm: Already downloaded                         
[SKIPPED] libslirp-4.4.0-1.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded        
[SKIPPED] netavark-1.7.0-2.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded        
[SKIPPED] podman-4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded      
[SKIPPED] podman-catatonit-4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded
[SKIPPED] podman-docker-4.6.1-8.0.1.module+el8.9.0+90147+a4870853.noarch.rpm: Already downloaded
[SKIPPED] podman-gvproxy-4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded
[SKIPPED] podman-plugins-4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded
[SKIPPED] runc-1.1.12-1.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded           
[SKIPPED] slirp4netns-1.2.1-1.module+el8.9.0+90147+a4870853.aarch64.rpm: Already downloaded     
[SKIPPED] tcpdump-4.9.3-3.el8_9.1.aarch64.rpm: Already downloaded                               
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                         1/1 
  Running scriptlet: container-selinux-2:2.221.0-1.module+el8.9.0+90147+a4870853.noarch      1/1 
  Running scriptlet: container-selinux-2:2.221.0-1.module+el8.9.0+90147+a4870853.noarch     1/70 
  Upgrading        : container-selinux-2:2.221.0-1.module+el8.9.0+90147+a4870853.noarch     1/70 
  Running scriptlet: container-selinux-2:2.221.0-1.module+el8.9.0+90147+a4870853.noarch     1/70 
  Upgrading        : fuse-overlayfs-1.12-1.module+el8.9.0+90147+a4870853.aarch64            2/70 
  Running scriptlet: fuse-overlayfs-1.12-1.module+el8.9.0+90147+a4870853.aarch64            2/70 
  Upgrading        : rpm-libs-4.14.3-28.0.2.el8_9.aarch64                                   3/70 
  Running scriptlet: rpm-libs-4.14.3-28.0.2.el8_9.aarch64                                   3/70 
  Upgrading        : rpm-4.14.3-28.0.2.el8_9.aarch64                                        4/70 
  Upgrading        : rpm-build-libs-4.14.3-28.0.2.el8_9.aarch64                             5/70 
  Running scriptlet: rpm-build-libs-4.14.3-28.0.2.el8_9.aarch64                             5/70 
  Upgrading        : podman-gvproxy-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64     6/70 
  Upgrading        : podman-plugins-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64     7/70 
  Upgrading        : libslirp-4.4.0-1.module+el8.9.0+90147+a4870853.aarch64                 8/70 
  Upgrading        : slirp4netns-1.2.1-1.module+el8.9.0+90147+a4870853.aarch64              9/70 
  Upgrading        : containernetworking-plugins-1:1.3.0-8.0.1.module+el8.9.0+90147+a487   10/70 
  Upgrading        : conmon-3:2.1.8-1.module+el8.9.0+90147+a4870853.aarch64                11/70 
  Upgrading        : aardvark-dns-2:1.7.0-1.module+el8.9.0+90147+a4870853.aarch64          12/70 
  Upgrading        : netavark-2:1.7.0-2.module+el8.9.0+90147+a4870853.aarch64              13/70 
  Upgrading        : libnfsidmap-1:2.3.3-59.0.1.el8.aarch64                                14/70 
  Upgrading        : gnutls-3.6.16-8.el8_9.1.aarch64                                       15/70 
  Upgrading        : criu-3.18-4.module+el8.9.0+90147+a4870853.aarch64                     16/70 
  Upgrading        : runc-1:1.1.12-1.module+el8.9.0+90147+a4870853.aarch64                 17/70 
  Upgrading        : containers-common-2:1-70.0.2.module+el8.9.0+90147+a4870853.aarch64    18/70 
  Upgrading        : podman-catatonit-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch6   19/70 
  Upgrading        : podman-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64            20/70 
  Upgrading        : podman-docker-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.noarch      21/70 
  Running scriptlet: nfs-utils-1:2.3.3-59.0.1.el8.aarch64                                  22/70 
  Upgrading        : nfs-utils-1:2.3.3-59.0.1.el8.aarch64                                  22/70 
  Running scriptlet: nfs-utils-1:2.3.3-59.0.1.el8.aarch64                                  22/70 
  Upgrading        : python3-rpm-4.14.3-28.0.2.el8_9.aarch64                               23/70 
  Upgrading        : rpm-plugin-selinux-4.14.3-28.0.2.el8_9.aarch64                        24/70 
  Upgrading        : rpm-plugin-systemd-inhibit-4.14.3-28.0.2.el8_9.aarch64                25/70 
  Running scriptlet: tcpdump-14:4.9.3-3.el8_9.1.aarch64                                    26/70 
  Upgrading        : tcpdump-14:4.9.3-3.el8_9.1.aarch64                                    26/70 
  Upgrading        : libmaxminddb-1.2.0-10.el8_9.1.aarch64                                 27/70 
  Running scriptlet: libmaxminddb-1.2.0-10.el8_9.1.aarch64                                 27/70 
  Upgrading        : jq-1.6-7.0.3.el8.aarch64                                              28/70 
  Upgrading        : tzdata-2024a-1.0.1.el8.noarch                                         29/70 
  Upgrading        : sudo-1.9.5p2-1.el8_9.aarch64                                          30/70 
  Running scriptlet: sudo-1.9.5p2-1.el8_9.aarch64                                          30/70 
  Upgrading        : sos-4.6.1-1.0.1.el8.noarch                                            31/70 
  Upgrading        : kexec-tools-2.0.26-8.0.2.el8.aarch64                                  32/70 
  Running scriptlet: kexec-tools-2.0.26-8.0.2.el8.aarch64                                  32/70 
  Installing       : kernel-uek-devel-5.4.17-2136.328.3.el8uek.aarch64                     33/70 
  Running scriptlet: kernel-uek-devel-5.4.17-2136.328.3.el8uek.aarch64                     33/70 
  Installing       : kernel-uek-debug-devel-5.4.17-2136.328.3.el8uek.aarch64               34/70 
  Running scriptlet: kernel-uek-debug-devel-5.4.17-2136.328.3.el8uek.aarch64               34/70 
  Running scriptlet: kernel-uek-5.4.17-2136.328.3.el8uek.aarch64                           35/70 
  Installing       : kernel-uek-5.4.17-2136.328.3.el8uek.aarch64                           35/70 
  Running scriptlet: kernel-uek-5.4.17-2136.328.3.el8uek.aarch64                           35/70 
  Cleanup          : python3-rpm-4.14.3-26.0.1.el8.aarch64                                 36/70 
  Cleanup          : rpm-build-libs-4.14.3-26.0.1.el8.aarch64                              37/70 
  Running scriptlet: rpm-build-libs-4.14.3-26.0.1.el8.aarch64                              37/70 
  Cleanup          : rpm-plugin-systemd-inhibit-4.14.3-26.0.1.el8.aarch64                  38/70 
  Cleanup          : rpm-plugin-selinux-4.14.3-26.0.1.el8.aarch64                          39/70 
  Running scriptlet: nfs-utils-1:2.3.3-59.el8.aarch64                                      40/70 
  Cleanup          : nfs-utils-1:2.3.3-59.el8.aarch64                                      40/70 
  Running scriptlet: nfs-utils-1:2.3.3-59.el8.aarch64                                      40/70 
  Cleanup          : podman-docker-3:4.6.1-4.module+el8.9.0+90102+5a5b2dad.noarch          41/70 
  Erasing          : kernel-uek-devel-5.4.17-2136.325.5.1.el8uek.aarch64                   42/70 
  Erasing          : kernel-uek-debug-devel-5.4.17-2136.325.5.1.el8uek.aarch64             43/70 
  Cleanup          : tzdata-2023d-1.0.1.el8.noarch                                         44/70 
  Cleanup          : sos-4.6.0-5.0.1.el8.noarch                                            45/70 
  Running scriptlet: podman-3:4.6.1-4.module+el8.9.0+90102+5a5b2dad.aarch64                46/70 
  Cleanup          : podman-3:4.6.1-4.module+el8.9.0+90102+5a5b2dad.aarch64                46/70 
  Cleanup          : containers-common-2:1-70.0.1.module+el8.9.0+90102+5a5b2dad.aarch64    47/70 
  Cleanup          : slirp4netns-1.2.1-1.module+el8.9.0+90102+5a5b2dad.aarch64             48/70 
  Cleanup          : runc-1:1.1.9-1.module+el8.9.0+90102+5a5b2dad.aarch64                  49/70 
  Cleanup          : criu-3.18-4.module+el8.9.0+90102+5a5b2dad.aarch64                     50/70 
  Cleanup          : podman-plugins-3:4.6.1-4.module+el8.9.0+90102+5a5b2dad.aarch64        51/70 
  Cleanup          : netavark-2:1.7.0-1.module+el8.9.0+90102+5a5b2dad.aarch64              52/70 
  Cleanup          : rpm-4.14.3-26.0.1.el8.aarch64                                         53/70 
  Cleanup          : rpm-libs-4.14.3-26.0.1.el8.aarch64                                    54/70 
  Running scriptlet: rpm-libs-4.14.3-26.0.1.el8.aarch64                                    54/70 
  Cleanup          : container-selinux-2:2.221.0-1.module+el8.9.0+90102+5a5b2dad.noarch    55/70 
  Running scriptlet: container-selinux-2:2.221.0-1.module+el8.9.0+90102+5a5b2dad.noarch    55/70 
  Cleanup          : podman-catatonit-3:4.6.1-4.module+el8.9.0+90102+5a5b2dad.aarch64      56/70 
  Cleanup          : aardvark-dns-2:1.7.0-1.module+el8.9.0+90102+5a5b2dad.aarch64          57/70 
  Cleanup          : podman-gvproxy-3:4.6.1-4.module+el8.9.0+90102+5a5b2dad.aarch64        58/70 
  Cleanup          : gnutls-3.6.16-8.el8_9.aarch64                                         59/70 
  Cleanup          : libslirp-4.4.0-1.module+el8.9.0+90102+5a5b2dad.aarch64                60/70 
  Cleanup          : fuse-overlayfs-1.12-1.module+el8.9.0+90102+5a5b2dad.aarch64           61/70 
  Cleanup          : conmon-3:2.1.8-1.module+el8.9.0+90102+5a5b2dad.aarch64                62/70 
  Cleanup          : containernetworking-plugins-1:1.3.0-4.module+el8.9.0+90102+5a5b2dad   63/70 
  Cleanup          : libnfsidmap-1:2.3.3-59.el8.aarch64                                    64/70 
  Running scriptlet: kernel-uek-5.4.17-2136.325.5.1.el8uek.aarch64                         65/70 
  Erasing          : kernel-uek-5.4.17-2136.325.5.1.el8uek.aarch64                         65/70 
  Running scriptlet: kernel-uek-5.4.17-2136.325.5.1.el8uek.aarch64                         65/70 
  Cleanup          : tcpdump-14:4.9.3-3.el8.aarch64                                        66/70 
  Cleanup          : libmaxminddb-1.2.0-10.el8.aarch64                                     67/70 
  Running scriptlet: libmaxminddb-1.2.0-10.el8.aarch64                                     67/70 
  Cleanup          : jq-1.6-7.0.1.el8.aarch64                                              68/70 
  Cleanup          : sudo-1.8.29-10.el8.aarch64                                            69/70 
  Running scriptlet: kexec-tools-2.0.26-8.0.1.el8.aarch64                                  70/70 
  Cleanup          : kexec-tools-2.0.26-8.0.1.el8.aarch64                                  70/70 
  Running scriptlet: kexec-tools-2.0.26-8.0.1.el8.aarch64                                  70/70 
  Running scriptlet: container-selinux-2:2.221.0-1.module+el8.9.0+90147+a4870853.noarch    70/70 
  Running scriptlet: kernel-uek-5.4.17-2136.328.3.el8uek.aarch64                           70/70 
  Running scriptlet: kexec-tools-2.0.26-8.0.1.el8.aarch64                                  70/70 
  Verifying        : kernel-uek-5.4.17-2136.328.3.el8uek.aarch64                            1/70 
  Verifying        : kernel-uek-debug-devel-5.4.17-2136.328.3.el8uek.aarch64                2/70 
  Verifying        : kernel-uek-devel-5.4.17-2136.328.3.el8uek.aarch64                      3/70 
  Verifying        : gnutls-3.6.16-8.el8_9.1.aarch64                                        4/70 
  Verifying        : gnutls-3.6.16-8.el8_9.aarch64                                          5/70 
  Verifying        : kexec-tools-2.0.26-8.0.2.el8.aarch64                                   6/70 
  Verifying        : kexec-tools-2.0.26-8.0.1.el8.aarch64                                   7/70 
  Verifying        : libnfsidmap-1:2.3.3-59.0.1.el8.aarch64                                 8/70 
  Verifying        : libnfsidmap-1:2.3.3-59.el8.aarch64                                     9/70 
  Verifying        : nfs-utils-1:2.3.3-59.0.1.el8.aarch64                                  10/70 
  Verifying        : nfs-utils-1:2.3.3-59.el8.aarch64                                      11/70 
  Verifying        : python3-rpm-4.14.3-28.0.2.el8_9.aarch64                               12/70 
  Verifying        : python3-rpm-4.14.3-26.0.1.el8.aarch64                                 13/70 
  Verifying        : rpm-4.14.3-28.0.2.el8_9.aarch64                                       14/70 
  Verifying        : rpm-4.14.3-26.0.1.el8.aarch64                                         15/70 
  Verifying        : rpm-build-libs-4.14.3-28.0.2.el8_9.aarch64                            16/70 
  Verifying        : rpm-build-libs-4.14.3-26.0.1.el8.aarch64                              17/70 
  Verifying        : rpm-libs-4.14.3-28.0.2.el8_9.aarch64                                  18/70 
  Verifying        : rpm-libs-4.14.3-26.0.1.el8.aarch64                                    19/70 
  Verifying        : rpm-plugin-selinux-4.14.3-28.0.2.el8_9.aarch64                        20/70 
  Verifying        : rpm-plugin-selinux-4.14.3-26.0.1.el8.aarch64                          21/70 
  Verifying        : rpm-plugin-systemd-inhibit-4.14.3-28.0.2.el8_9.aarch64                22/70 
  Verifying        : rpm-plugin-systemd-inhibit-4.14.3-26.0.1.el8.aarch64                  23/70 
  Verifying        : sos-4.6.1-1.0.1.el8.noarch                                            24/70 
  Verifying        : sos-4.6.0-5.0.1.el8.noarch                                            25/70 
  Verifying        : sudo-1.9.5p2-1.el8_9.aarch64                                          26/70 
  Verifying        : sudo-1.8.29-10.el8.aarch64                                            27/70 
  Verifying        : tzdata-2024a-1.0.1.el8.noarch                                         28/70 
  Verifying        : tzdata-2023d-1.0.1.el8.noarch                                         29/70 
  Verifying        : aardvark-dns-2:1.7.0-1.module+el8.9.0+90147+a4870853.aarch64          30/70 
  Verifying        : aardvark-dns-2:1.7.0-1.module+el8.9.0+90102+5a5b2dad.aarch64          31/70 
  Verifying        : conmon-3:2.1.8-1.module+el8.9.0+90147+a4870853.aarch64                32/70 
  Verifying        : conmon-3:2.1.8-1.module+el8.9.0+90102+5a5b2dad.aarch64                33/70 
  Verifying        : container-selinux-2:2.221.0-1.module+el8.9.0+90147+a4870853.noarch    34/70 
  Verifying        : container-selinux-2:2.221.0-1.module+el8.9.0+90102+5a5b2dad.noarch    35/70 
  Verifying        : containernetworking-plugins-1:1.3.0-8.0.1.module+el8.9.0+90147+a487   36/70 
  Verifying        : containernetworking-plugins-1:1.3.0-4.module+el8.9.0+90102+5a5b2dad   37/70 
  Verifying        : containers-common-2:1-70.0.2.module+el8.9.0+90147+a4870853.aarch64    38/70 
  Verifying        : containers-common-2:1-70.0.1.module+el8.9.0+90102+5a5b2dad.aarch64    39/70 
  Verifying        : criu-3.18-4.module+el8.9.0+90147+a4870853.aarch64                     40/70 
  Verifying        : criu-3.18-4.module+el8.9.0+90102+5a5b2dad.aarch64                     41/70 
  Verifying        : fuse-overlayfs-1.12-1.module+el8.9.0+90147+a4870853.aarch64           42/70 
  Verifying        : fuse-overlayfs-1.12-1.module+el8.9.0+90102+5a5b2dad.aarch64           43/70 
  Verifying        : jq-1.6-7.0.3.el8.aarch64                                              44/70 
  Verifying        : jq-1.6-7.0.1.el8.aarch64                                              45/70 
  Verifying        : libmaxminddb-1.2.0-10.el8_9.1.aarch64                                 46/70 
  Verifying        : libmaxminddb-1.2.0-10.el8.aarch64                                     47/70 
  Verifying        : libslirp-4.4.0-1.module+el8.9.0+90147+a4870853.aarch64                48/70 
  Verifying        : libslirp-4.4.0-1.module+el8.9.0+90102+5a5b2dad.aarch64                49/70 
  Verifying        : netavark-2:1.7.0-2.module+el8.9.0+90147+a4870853.aarch64              50/70 
  Verifying        : netavark-2:1.7.0-1.module+el8.9.0+90102+5a5b2dad.aarch64              51/70 
  Verifying        : podman-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64            52/70 
  Verifying        : podman-3:4.6.1-4.module+el8.9.0+90102+5a5b2dad.aarch64                53/70 
  Verifying        : podman-catatonit-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch6   54/70 
  Verifying        : podman-catatonit-3:4.6.1-4.module+el8.9.0+90102+5a5b2dad.aarch64      55/70 
  Verifying        : podman-docker-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.noarch      56/70 
  Verifying        : podman-docker-3:4.6.1-4.module+el8.9.0+90102+5a5b2dad.noarch          57/70 
  Verifying        : podman-gvproxy-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64    58/70 
  Verifying        : podman-gvproxy-3:4.6.1-4.module+el8.9.0+90102+5a5b2dad.aarch64        59/70 
  Verifying        : podman-plugins-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64    60/70 
  Verifying        : podman-plugins-3:4.6.1-4.module+el8.9.0+90102+5a5b2dad.aarch64        61/70 
  Verifying        : runc-1:1.1.12-1.module+el8.9.0+90147+a4870853.aarch64                 62/70 
  Verifying        : runc-1:1.1.9-1.module+el8.9.0+90102+5a5b2dad.aarch64                  63/70 
  Verifying        : slirp4netns-1.2.1-1.module+el8.9.0+90147+a4870853.aarch64             64/70 
  Verifying        : slirp4netns-1.2.1-1.module+el8.9.0+90102+5a5b2dad.aarch64             65/70 
  Verifying        : tcpdump-14:4.9.3-3.el8_9.1.aarch64                                    66/70 
  Verifying        : tcpdump-14:4.9.3-3.el8.aarch64                                        67/70 
  Verifying        : kernel-uek-5.4.17-2136.325.5.1.el8uek.aarch64                         68/70 
  Verifying        : kernel-uek-debug-devel-5.4.17-2136.325.5.1.el8uek.aarch64             69/70 
  Verifying        : kernel-uek-devel-5.4.17-2136.325.5.1.el8uek.aarch64                   70/70 

Upgraded:
  aardvark-dns-2:1.7.0-1.module+el8.9.0+90147+a4870853.aarch64                                   
  conmon-3:2.1.8-1.module+el8.9.0+90147+a4870853.aarch64                                         
  container-selinux-2:2.221.0-1.module+el8.9.0+90147+a4870853.noarch                             
  containernetworking-plugins-1:1.3.0-8.0.1.module+el8.9.0+90147+a4870853.aarch64                
  containers-common-2:1-70.0.2.module+el8.9.0+90147+a4870853.aarch64                             
  criu-3.18-4.module+el8.9.0+90147+a4870853.aarch64                                              
  fuse-overlayfs-1.12-1.module+el8.9.0+90147+a4870853.aarch64                                    
  gnutls-3.6.16-8.el8_9.1.aarch64                                                                
  jq-1.6-7.0.3.el8.aarch64                                                                       
  kexec-tools-2.0.26-8.0.2.el8.aarch64                                                           
  libmaxminddb-1.2.0-10.el8_9.1.aarch64                                                          
  libnfsidmap-1:2.3.3-59.0.1.el8.aarch64                                                         
  libslirp-4.4.0-1.module+el8.9.0+90147+a4870853.aarch64                                         
  netavark-2:1.7.0-2.module+el8.9.0+90147+a4870853.aarch64                                       
  nfs-utils-1:2.3.3-59.0.1.el8.aarch64                                                           
  podman-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64                                     
  podman-catatonit-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64                           
  podman-docker-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.noarch                               
  podman-gvproxy-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64                             
  podman-plugins-3:4.6.1-8.0.1.module+el8.9.0+90147+a4870853.aarch64                             
  python3-rpm-4.14.3-28.0.2.el8_9.aarch64                                                        
  rpm-4.14.3-28.0.2.el8_9.aarch64                                                                
  rpm-build-libs-4.14.3-28.0.2.el8_9.aarch64                                                     
  rpm-libs-4.14.3-28.0.2.el8_9.aarch64                                                           
  rpm-plugin-selinux-4.14.3-28.0.2.el8_9.aarch64                                                 
  rpm-plugin-systemd-inhibit-4.14.3-28.0.2.el8_9.aarch64                                         
  runc-1:1.1.12-1.module+el8.9.0+90147+a4870853.aarch64                                          
  slirp4netns-1.2.1-1.module+el8.9.0+90147+a4870853.aarch64                                      
  sos-4.6.1-1.0.1.el8.noarch                                                                     
  sudo-1.9.5p2-1.el8_9.aarch64                                                                   
  tcpdump-14:4.9.3-3.el8_9.1.aarch64                                                             
  tzdata-2024a-1.0.1.el8.noarch                                                                  
Installed:
  kernel-uek-5.4.17-2136.328.3.el8uek.aarch64                                                    
  kernel-uek-debug-devel-5.4.17-2136.328.3.el8uek.aarch64                                        
  kernel-uek-devel-5.4.17-2136.328.3.el8uek.aarch64                                              
Removed:
  kernel-uek-5.4.17-2136.325.5.1.el8uek.aarch64                                                  
  kernel-uek-debug-devel-5.4.17-2136.325.5.1.el8uek.aarch64                                      
  kernel-uek-devel-5.4.17-2136.325.5.1.el8uek.aarch64                                            

Complete!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 재 생성 후 다시 업데이트를 실행하니 정상적으로 되는 것을 확인 할 수 있습니다.&lt;/p&gt;</description>
      <category>코딩스토리/리눅스</category>
      <category>30973</category>
      <category>DB</category>
      <category>dnf오류</category>
      <category>rpm</category>
      <category>rpmdb</category>
      <category>rpmdberror</category>
      <category>rpmdbrebuild</category>
      <category>rpmdbrecovery</category>
      <category>리눅스</category>
      <category>리눅스업데이트오류</category>
      <author>Tech&amp;amp;Fin</author>
      <guid isPermaLink="true">https://technfin.tistory.com/116</guid>
      <comments>https://technfin.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-RPM-DB-Error-db5-error-30973#entry116comment</comments>
      <pubDate>Thu, 15 Feb 2024 15:09:40 +0900</pubDate>
    </item>
    <item>
      <title>Mac PC에서 파이썬(Python) 버전 업그레이드 하기(feat. brew)</title>
      <link>https://technfin.tistory.com/entry/Mac-PC%EC%97%90%EC%84%9C-%ED%8C%8C%EC%9D%B4%EC%8D%ACPython-%EB%B2%84%EC%A0%84-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%98%EA%B8%B0feat-brew</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20231124_맥_파이썬_업그레이드.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sHTFo/btsANMssrao/VLsF7U8iSRRjfLD7UaQfW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sHTFo/btsANMssrao/VLsF7U8iSRRjfLD7UaQfW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sHTFo/btsANMssrao/VLsF7U8iSRRjfLD7UaQfW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsHTFo%2FbtsANMssrao%2FVLsF7U8iSRRjfLD7UaQfW0%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;960&quot; height=&quot;540&quot; data-filename=&quot;20231124_맥_파이썬_업그레이드.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;odyssey-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차 - 클릭하면 이동합니다.&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Mac PC에서 파이썬 버전 업그레이드 하기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;현재 파이썬 버전 확인&lt;/h3&gt;
&lt;pre id=&quot;code_1700787712047&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;technfin@MacBookPro ~ % python --version
zsh: command not found: python
technfin@MacBookPro ~ %
technfin@MacBookPro ~ % python3 --version
Python 3.11.5
technfin@MacBookPro ~ %&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 명령어를 통해 현재 설치되어 있는 파이썬의 버전을 확인 할 수 있습니다. 저의 경우에는 3.11 5 버전이 설치되어 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;업그레이드&lt;/h3&gt;
&lt;pre id=&quot;code_1700788581123&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;technfin@MacBookPro ~ % brew update &amp;amp;&amp;amp; brew upgrade python3
==&amp;gt; Homebrew collects anonymous analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics
No analytics have been recorded yet (nor will be during this `brew` run).

==&amp;gt; Homebrew is run entirely by unpaid volunteers. Please consider donating:
  https://github.com/Homebrew/brew#donations
  
 ...
 ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;brew update &amp;amp;&amp;amp; brew upgrade python3 명령어를 통해 업그레이드를 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700788627958&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;technfin@MacBookPro ~ % python3 --version
Python 3.11.6
technfin@MacBookPro ~ %&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 버전을 확인해 보면 3.11.6으로 업그레이드 된 것을 확인하실 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 시간에는 Mac PC에서 파이썬 업그레이드 하는 과정을 살펴 보았습니다. 감사합니다.&lt;/p&gt;</description>
      <category>코딩스토리/개발관련</category>
      <category>brew</category>
      <category>brew업데이트</category>
      <category>brew파이썬업그레이드</category>
      <category>macos파이썬</category>
      <category>맥파이썬업그레이드</category>
      <category>파이썬brew업데이트</category>
      <category>파이썬맥업그레이드</category>
      <category>파이썬맥업데이트</category>
      <category>파이썬업그레이드</category>
      <category>파이썬업데이트</category>
      <author>Tech&amp;amp;Fin</author>
      <guid isPermaLink="true">https://technfin.tistory.com/115</guid>
      <comments>https://technfin.tistory.com/entry/Mac-PC%EC%97%90%EC%84%9C-%ED%8C%8C%EC%9D%B4%EC%8D%ACPython-%EB%B2%84%EC%A0%84-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%98%EA%B8%B0feat-brew#entry115comment</comments>
      <pubDate>Fri, 24 Nov 2023 10:19:07 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL 도커 사용하여 설치하기</title>
      <link>https://technfin.tistory.com/entry/PostgreSQL-%EB%8F%84%EC%BB%A4-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20231121_PostgreSQL_도커사용설치.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1ydRT/btsAF56xbzo/GOdxcNVbRmJXKN35LKZXkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1ydRT/btsAF56xbzo/GOdxcNVbRmJXKN35LKZXkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1ydRT/btsAF56xbzo/GOdxcNVbRmJXKN35LKZXkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1ydRT%2FbtsAF56xbzo%2FGOdxcNVbRmJXKN35LKZXkK%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;960&quot; height=&quot;540&quot; data-filename=&quot;20231121_PostgreSQL_도커사용설치.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;odyssey-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차 - 클릭하면 이동합니다.&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;도커 사용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커(Docker)는 요즘 거의 필수로 사용되고 있는 듯 한데요. 도커를 사용하면 여러가지 프로그램들을 간편하게 설치할 수 있고 독립된 프로세스에서 실행할 수 있습니다.&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;이번 시간에는 도커를 사용해서 PostgreSQL을 설치해 볼 예정인데요. amd64 계열의 서버를 사용하시는 분들은 docker 사용이 가능하지만&amp;nbsp;aarch64 에서는 아쉽게도 도커를 설치할 수 없습니다.&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;하지만 대신 Podman이라는 것을 사용할 수 있는데요. docker를 podman으로 명령어만 바꾸면 모든게 똑같습니다. 저는 aarch64 서버에서 설치를 진행해 볼 예정입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도커 계정 만들기&lt;/h3&gt;
&lt;pre id=&quot;code_1700549815455&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[python@instance-technfin ~]$ podman --version
podman version 4.4.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 버전을 살펴 보겠습니다. 앞서 말씀드린 바와 같이 저는 aarch64 서버에서 진행할 예정이라 podman을 사용하겠습니다. docker를 사용하시는 분들은 docker --version 과 같이 podman만 docker로 변경해 주시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1700549967188&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[python@instance-technfin ~]$ sudo useradd docker

[python@instance-technfin ~]$ sudo passwd docker
Changing password for user docker.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[python@instance-technfin ~]$
[python@instance-technfin ~]$ sudo usermod -aG docker docker
[python@instance-technfin ~]$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; docker 라는 리눅스 계정을 하나 생성하였습니다. docker 는 루트 권한으로 실행해야 하기 때문에 생성한 계정에 루트 권한을 부여 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1700554084909&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
docker  ALL=(ALL)       ALL

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
docker  ALL=(ALL)       NOPASSWD: ALL&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker 계정이 루트 권한으로 명령어를 수행할 수 있도록 합니다. 저는 비밀번호 없이 root 권한으로 수행 가능하도록 변경하였습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1700550475732&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[python@instance-technfin ~]$ su - docker
Password:
Last failed login: Sun Nov 19 14:37:32 KST 2023 from 124.223.3.54 on ssh:notty
There were 89 failed login attempts since the last successful login.
[docker@instance-technfin ~]$ mkdir postgres
[docker@instance-technfin ~]$ cd postgres
[docker@instance-technfin postgres]$ ls -rlt
total 0
[docker@instance-technfin postgres]$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker 사용자로 전환하여 postgres 라는 폴더를 만들어 줍니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;PostgreSQL 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 일반 docker가 아닌 docker-compose를 사용해서 더욱 편리하게 설치하도록 하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1700551109713&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: '3.9'

services:
  postgres:
    container_name: postgresql-docker
    image: postgres:16-alpine3.18
    ports:
      - 5432:5432
    volumes:
      - ~/apps/postgres:/home/docker/postgres/data
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=username
      - POSTGRES_DB=dbname&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 위의 내용을 담은 docker-compose.yml 파일을 만들어 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700617325677&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[docker@instance-technfin postgres]$ pwd
/home/docker/postgres
[docker@instance-technfin postgres]$
[docker@instance-technfin postgres]$ ls -rlt
total 4
-rw-rw-r--. 1 docker docker 322 Nov 21 17:01 docker-compose.yml
[docker@instance-technfin postgres]$
[docker@instance-technfin postgres]$ sudo podman-compose up -d
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 4.6.1
** excluding:  set()
['podman', 'ps', '--filter', 'label=io.podman.compose.project=postgres', '-a', '--format', '{{ index .Labels &quot;io.podman.compose.config-hash&quot;}}']
['podman', 'network', 'exists', 'postgres_default']
...
...
exit code: 0
[docker@instance-technfin postgres]$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo podman-compose up -d 또는 도커 환경에서는 sudo docker-compose up -d 를 사용해서 도커를 사용해 postgreSQL 데이터베이스를 설치하고 실행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700618262410&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[docker@instance-technfin postgres]$ podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[docker@instance-technfin postgres]$ sudo podman ps -a
CONTAINER ID  IMAGE                                     COMMAND     CREATED         STATUS         PORTS                   NAMES
c45d78a54eef  docker.io/library/postgres:16-alpine3.18  postgres    12 minutes ago  Up 12 minutes  0.0.0.0:5532-&amp;gt;5432/tcp  postgresql-docker
[docker@instance-technfin postgres]$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo podman ps -a 또는 sudo docker ps -a를 사용해서 정상적으로 컨테이너가 동작되고 있는지 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2156&quot; data-origin-height=&quot;1340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cubDmg/btsAGQuWUKw/lxmS9pwKWiVuK1fMJXWBRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cubDmg/btsAGQuWUKw/lxmS9pwKWiVuK1fMJXWBRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cubDmg/btsAGQuWUKw/lxmS9pwKWiVuK1fMJXWBRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcubDmg%2FbtsAGQuWUKw%2FlxmS9pwKWiVuK1fMJXWBRK%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;2156&quot; height=&quot;1340&quot; data-origin-width=&quot;2156&quot; data-origin-height=&quot;1340&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 접속 툴(저의 경우는 DBeaver)을 사용해서 접속 잘 되는지 테스트 해 보았습니다.&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;무료 DB 툴은 아래를 참고 부탁 드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://technfin.tistory.com/entry/%EB%AC%B4%EB%A3%8C-SQL-DB-%ED%88%B4-%EC%B6%94%EC%B2%9C-DBeaver-%EB%94%94%EB%B9%84%EB%B2%84&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.02.06 - [코딩스토리/개발관련] - 무료 SQL DB 툴 추천 - DBeaver 디비버&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1700618870080&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;무료 SQL DB 툴 추천 - DBeaver 디비버&quot; data-og-description=&quot;Tech&amp;amp;Fin에서는 이제부터 본격적으로 데이터베이스를 활용한 비트코인 자동매매 프로그램을 만드는 과정을 포스팅하려고 하는데요. 데이터베이스 서버에 접속하여 SQL 쿼리를 실행하기 위해서는 &quot; data-og-host=&quot;technfin.tistory.com&quot; data-og-source-url=&quot;https://technfin.tistory.com/entry/%EB%AC%B4%EB%A3%8C-SQL-DB-%ED%88%B4-%EC%B6%94%EC%B2%9C-DBeaver-%EB%94%94%EB%B9%84%EB%B2%84&quot; data-og-url=&quot;https://technfin.tistory.com/entry/%EB%AC%B4%EB%A3%8C-SQL-DB-%ED%88%B4-%EC%B6%94%EC%B2%9C-DBeaver-%EB%94%94%EB%B9%84%EB%B2%84&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AtWxf/hyUyvLQp8D/MqwhNuivKUNbiZxkLIFP2K/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/dqLxDa/hyUylbmxG8/5jVBQ5j0qZwV7hV4KTvutk/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bFEfWO/hyUywKKIq4/3R6MNoVcVqYdfo06ME9QY1/img.png?width=581&amp;amp;height=360&amp;amp;face=0_0_581_360&quot;&gt;&lt;a href=&quot;https://technfin.tistory.com/entry/%EB%AC%B4%EB%A3%8C-SQL-DB-%ED%88%B4-%EC%B6%94%EC%B2%9C-DBeaver-%EB%94%94%EB%B9%84%EB%B2%84&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://technfin.tistory.com/entry/%EB%AC%B4%EB%A3%8C-SQL-DB-%ED%88%B4-%EC%B6%94%EC%B2%9C-DBeaver-%EB%94%94%EB%B9%84%EB%B2%84&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AtWxf/hyUyvLQp8D/MqwhNuivKUNbiZxkLIFP2K/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/dqLxDa/hyUylbmxG8/5jVBQ5j0qZwV7hV4KTvutk/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bFEfWO/hyUywKKIq4/3R6MNoVcVqYdfo06ME9QY1/img.png?width=581&amp;amp;height=360&amp;amp;face=0_0_581_360');&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;무료 SQL DB 툴 추천 - DBeaver 디비버&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Tech&amp;amp;Fin에서는 이제부터 본격적으로 데이터베이스를 활용한 비트코인 자동매매 프로그램을 만드는 과정을 포스팅하려고 하는데요. 데이터베이스 서버에 접속하여 SQL 쿼리를 실행하기 위해서는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;technfin.tistory.com&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치한 DB를 외부에서 접속하려면 방화벽 개방도 필요하니 아래 글 참고 하시면 좋을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%A6%AC%EB%88%85%EC%8A%A4-8-PostgreSQL-13-%EC%99%B8%EB%B6%80-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.02.19 - [코딩스토리/리눅스] - 오라클 리눅스 8 - PostgreSQL 13 외부 접속하기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1700618942020&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;오라클 리눅스 8 - PostgreSQL 13 외부 접속하기&quot; data-og-description=&quot;지난 포스팅에서 리눅스 서버에 PostgreSQL 13 버전을 설치하고 설정하는 방법에 대해서 살펴 보았습니다. 이어서 이번 시간에는 방화벽 설정등을 마무리 짓고 DBeaver를 통해 외부에서 DB에 접속하는&quot; data-og-host=&quot;technfin.tistory.com&quot; data-og-source-url=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%A6%AC%EB%88%85%EC%8A%A4-8-PostgreSQL-13-%EC%99%B8%EB%B6%80-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%A6%AC%EB%88%85%EC%8A%A4-8-PostgreSQL-13-%EC%99%B8%EB%B6%80-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cdrRXD/hyUCdirdiL/mR9SFPZN2G9oXeSkgWU1FK/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/d2PTNe/hyUyzHqRFe/ilsAHTjPK7aZQnKROI67tk/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/qhqMF/hyUyqcFtfs/oBRoFIAZpqzcve4eE9AP11/img.png?width=1607&amp;amp;height=619&amp;amp;face=0_0_1607_619&quot;&gt;&lt;a href=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%A6%AC%EB%88%85%EC%8A%A4-8-PostgreSQL-13-%EC%99%B8%EB%B6%80-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%A6%AC%EB%88%85%EC%8A%A4-8-PostgreSQL-13-%EC%99%B8%EB%B6%80-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cdrRXD/hyUCdirdiL/mR9SFPZN2G9oXeSkgWU1FK/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/d2PTNe/hyUyzHqRFe/ilsAHTjPK7aZQnKROI67tk/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/qhqMF/hyUyqcFtfs/oBRoFIAZpqzcve4eE9AP11/img.png?width=1607&amp;amp;height=619&amp;amp;face=0_0_1607_619');&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;오라클 리눅스 8 - PostgreSQL 13 외부 접속하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 포스팅에서 리눅스 서버에 PostgreSQL 13 버전을 설치하고 설정하는 방법에 대해서 살펴 보았습니다. 이어서 이번 시간에는 방화벽 설정등을 마무리 짓고 DBeaver를 통해 외부에서 DB에 접속하는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;technfin.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;살펴 보았듯이 도커를 사용하면 여러가지 프로그램들 설치를사 OS환경에 구애 받지 않고 자유롭고 편리하게 할 수 있습니다. 향후 생성된 DB에 데이터를 적재하는 과정을 거쳐가며 새로운 버전의 자동매매 프로그램을 개발 하는 과정을 포스팅 해 볼 예정이오니 참고 부탁 드리겠습니다.&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;/p&gt;</description>
      <category>코딩스토리/데이터베이스</category>
      <category>aarch64도커</category>
      <category>docker</category>
      <category>docker-compose</category>
      <category>Podman</category>
      <category>podman-compose</category>
      <category>postgres</category>
      <category>PostgreSQL</category>
      <category>도커</category>
      <category>도커리눅스</category>
      <category>팟맨</category>
      <author>Tech&amp;amp;Fin</author>
      <guid isPermaLink="true">https://technfin.tistory.com/114</guid>
      <comments>https://technfin.tistory.com/entry/PostgreSQL-%EB%8F%84%EC%BB%A4-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0#entry114comment</comments>
      <pubDate>Wed, 22 Nov 2023 11:11:23 +0900</pubDate>
    </item>
    <item>
      <title>VS Code를 사용한 파이썬 SSH 원격 개발 환경 설정 및 pem 파일 권한 관련 오류 해결 방법</title>
      <link>https://technfin.tistory.com/entry/VS-Code%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-SSH-%EC%9B%90%EA%B2%A9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EB%B0%8F-pem-%ED%8C%8C%EC%9D%BC-%EA%B6%8C%ED%95%9C-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;파이썬_원격개발.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmhs15/btsAut0aG4h/Q90bm9OR0Hj1gqCOfbJkV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmhs15/btsAut0aG4h/Q90bm9OR0Hj1gqCOfbJkV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmhs15/btsAut0aG4h/Q90bm9OR0Hj1gqCOfbJkV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbmhs15%2FbtsAut0aG4h%2FQ90bm9OR0Hj1gqCOfbJkV1%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;960&quot; height=&quot;540&quot; data-filename=&quot;파이썬_원격개발.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;odyssey-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차 - 클릭하면 이동합니다.&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;파이썬 원격 개발 with VS Code&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램을 개발 할 때 보통은 자신의 PC, 즉 로컬 환경에서 개발 및 테스트를 진행하고 개발이 어느정도 완료되면 서버에&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;원격 개발은 VS Code 나 파이참 같은 개발 툴은 자신의 로컬 PC에서 사용하지만 소스는 서버에 있는 소스를 직접 수정하면서 개발 하고 실행도 직접 서버에서 하는 것을 말합니다.&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;파이참의 경우 프로페셔널 버전을 사용하면 원격 개발이 가능하지만 학생이나 교사 email이 없으면 지불해야 하는 비용이 조금 비싼 편이라서 무료로 사용할 수 있는 VS Code를 사용해서 파이썬 원격 개발 환경을 만들어 보려고 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;환경 설정&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;VS Code 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 아래 링크를 통해 VS Code를 설치해 줍니다. 윈도우즈나 Mac 버전 모두 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://code.visualstudio.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://code.visualstudio.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1700198575933&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;Visual Studio Code - Code Editing. Redefined&quot; data-og-description=&quot;Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.&amp;nbsp; Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.&quot; data-og-host=&quot;code.visualstudio.com&quot; data-og-source-url=&quot;https://code.visualstudio.com/&quot; data-og-url=&quot;https://code.visualstudio.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bpO4lA/hyUyt0aUwS/HP4qAHYkIWRWAztzV9Isf1/img.png?width=1012&amp;amp;height=506&amp;amp;face=0_0_1012_506&quot;&gt;&lt;a href=&quot;https://code.visualstudio.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://code.visualstudio.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bpO4lA/hyUyt0aUwS/HP4qAHYkIWRWAztzV9Isf1/img.png?width=1012&amp;amp;height=506&amp;amp;face=0_0_1012_506');&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;Visual Studio Code - Code Editing. Redefined&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.&amp;nbsp; Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;code.visualstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SSH 환경 설정&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;770&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r4blL/btsAuMzh0Hl/ABLWregk0cGhybDm6kkfn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r4blL/btsAuMzh0Hl/ABLWregk0cGhybDm6kkfn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r4blL/btsAuMzh0Hl/ABLWregk0cGhybDm6kkfn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr4blL%2FbtsAuMzh0Hl%2FABLWregk0cGhybDm6kkfn0%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;1026&quot; height=&quot;770&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;770&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;View &amp;gt; Command Pallette... 혹은 Ctrl + Shift + P를 눌러 Command Pallette를 열여 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1023&quot; data-origin-height=&quot;766&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kJfY2/btsAuOcLpsn/9O5Fery5pMKfs86Ssx2BCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kJfY2/btsAuOcLpsn/9O5Fery5pMKfs86Ssx2BCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kJfY2/btsAuOcLpsn/9O5Fery5pMKfs86Ssx2BCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkJfY2%2FbtsAuOcLpsn%2F9O5Fery5pMKfs86Ssx2BCK%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;1023&quot; height=&quot;766&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Command Pallette 에서 Remote-SSH: Connect to Host를 검색하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Remote-SSH: Connect to Host...를 클릭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1022&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biNhK9/btsAvVJiro5/e7keaYbajM1znbhBRYgpcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biNhK9/btsAvVJiro5/e7keaYbajM1znbhBRYgpcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biNhK9/btsAvVJiro5/e7keaYbajM1znbhBRYgpcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiNhK9%2FbtsAvVJiro5%2Fe7keaYbajM1znbhBRYgpcK%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;1022&quot; height=&quot;765&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Configure SSH Hosts 를 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1021&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wu1Yt/btsArngb6NH/eNAHvhptUOJQlI7hPmF25K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wu1Yt/btsArngb6NH/eNAHvhptUOJQlI7hPmF25K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wu1Yt/btsArngb6NH/eNAHvhptUOJQlI7hPmF25K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwu1Yt%2FbtsArngb6NH%2FeNAHvhptUOJQlI7hPmF25K%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;1021&quot; height=&quot;768&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제일 첫번째 나오는 사용자 폴더 아래의 .ssh/config 폴더를 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1026&quot; data-origin-height=&quot;769&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkxe34/btsAuh0CV1Y/Dv8QlWE6IbPzKeMDB5dHRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkxe34/btsAuh0CV1Y/Dv8QlWE6IbPzKeMDB5dHRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkxe34/btsAuh0CV1Y/Dv8QlWE6IbPzKeMDB5dHRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkxe34%2FbtsAuh0CV1Y%2FDv8QlWE6IbPzKeMDB5dHRK%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;1026&quot; height=&quot;769&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;769&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Host : 관리하는 호스트의 이름입니다. 원하는 호스트명을 아무것이나 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HostName : 서버의 IP를 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- User : 서버에 로그인 하는 ID를 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IdentityFile : Private Key의 위치를 입력합니다.&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;서버 접속&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;767&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccGPaL/btsAvrBDQxr/5lJfxKM0ug7OBUWuKmvDOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccGPaL/btsAvrBDQxr/5lJfxKM0ug7OBUWuKmvDOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccGPaL/btsAvrBDQxr/5lJfxKM0ug7OBUWuKmvDOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccGPaL%2FbtsAvrBDQxr%2F5lJfxKM0ug7OBUWuKmvDOK%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;1022&quot; height=&quot;767&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;767&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 Command Pallet (Ctrl + Shift + P)에서 Remote-SSH: Connect to Host를 누르면 조금전에 등록한 호스트 명이 보이게 됩니다. 해당 호스트명을 클릭하여 접속합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1024&quot; data-origin-height=&quot;770&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQbdf4/btsAro0viHr/g8Xz29tuO2I6mcJL2KtjEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQbdf4/btsAro0viHr/g8Xz29tuO2I6mcJL2KtjEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQbdf4/btsAro0viHr/g8Xz29tuO2I6mcJL2KtjEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQbdf4%2FbtsAro0viHr%2Fg8Xz29tuO2I6mcJL2KtjEK%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;1024&quot; height=&quot;770&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;770&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 VS Code 창이 열리고 Remote Connection 을 할 Platform을 선택하라고 나옵니다. 저의 경우는 Oracle Cloud를 이용해 만든 Linux 서버에 접속을 할 예정이기 때문에 Linux를 선택하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1023&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEYAiM/btsAxcqtVHj/OBjIEGWiVHE4wLgYzvG8W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEYAiM/btsAxcqtVHj/OBjIEGWiVHE4wLgYzvG8W1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEYAiM/btsAxcqtVHj/OBjIEGWiVHE4wLgYzvG8W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEYAiM%2FbtsAxcqtVHj%2FOBjIEGWiVHE4wLgYzvG8W1%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;1023&quot; height=&quot;768&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속을 하려고 하니 Private Key가 보호되지 않아서 접속이 불가하다고 에러가 발생했습니다. 이는 Private Key의 권한 관련 오류로써 리눅스에서는 chomd 400을 통해 파일의 권한을 조정해 줘야 하는데 윈도우에서도 비슷한 작업을 해 주어야 할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1339&quot; data-origin-height=&quot;647&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNDctv/btsArn8kDv9/Ndps2DW6oXI6ibykk8OQ6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNDctv/btsArn8kDv9/Ndps2DW6oXI6ibykk8OQ6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNDctv/btsArn8kDv9/Ndps2DW6oXI6ibykk8OQ6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNDctv%2FbtsArn8kDv9%2FNdps2DW6oXI6ibykk8OQ6K%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;1339&quot; height=&quot;647&quot; data-origin-width=&quot;1339&quot; data-origin-height=&quot;647&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Private Key 파일을 탐색기로 찾아가서 우클릭 한 후 속성을 클릭하여 나오는 창에서&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&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qkBEG/btsAvWBuuc0/9B2zlTEZnXWbw7WuHnVzfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qkBEG/btsAvWBuuc0/9B2zlTEZnXWbw7WuHnVzfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qkBEG/btsAvWBuuc0/9B2zlTEZnXWbw7WuHnVzfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqkBEG%2FbtsAvWBuuc0%2F9B2zlTEZnXWbw7WuHnVzfK%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;545&quot; height=&quot;276&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;이 개체에서 상속된 사용 권한을 모두 제거합니다.&quot; 를 클릭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1174&quot; data-origin-height=&quot;722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q0qXw/btsAs6rzERm/2L9423pJagn3sPXHciexe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q0qXw/btsAs6rzERm/2L9423pJagn3sPXHciexe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q0qXw/btsAs6rzERm/2L9423pJagn3sPXHciexe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq0qXw%2FbtsAs6rzERm%2F2L9423pJagn3sPXHciexe0%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;1174&quot; height=&quot;722&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;722&quot;/&gt;&lt;/span&gt;&lt;/figure&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/58Xq1/btsAxWuchY1/Y04AUqjlldiDAOuFwvNHR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/58Xq1/btsAxWuchY1/Y04AUqjlldiDAOuFwvNHR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/58Xq1/btsAxWuchY1/Y04AUqjlldiDAOuFwvNHR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F58Xq1%2FbtsAxWuchY1%2FY04AUqjlldiDAOuFwvNHR1%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;895&quot; height=&quot;594&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;/figure&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1031&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JT3rH/btsAvruW9gt/6R5hkgH6XLpTlARpUtKpGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JT3rH/btsAvruW9gt/6R5hkgH6XLpTlARpUtKpGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JT3rH/btsAvruW9gt/6R5hkgH6XLpTlARpUtKpGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJT3rH%2FbtsAvruW9gt%2F6R5hkgH6XLpTlARpUtKpGk%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;1031&quot; height=&quot;765&quot; data-origin-width=&quot;1031&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 접속을 시도하면 이번에는 passphrase를 물어옵니다. Private Key에 걸어 놓은 암호를 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1024&quot; data-origin-height=&quot;771&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v6xNd/btsArA7xhXz/qByKDj2m3YhaosbGTXiGbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v6xNd/btsArA7xhXz/qByKDj2m3YhaosbGTXiGbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v6xNd/btsArA7xhXz/qByKDj2m3YhaosbGTXiGbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv6xNd%2FbtsArA7xhXz%2FqByKDj2m3YhaosbGTXiGbk%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;1024&quot; height=&quot;771&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;771&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 하단에 &quot;SSH: 호스트명&quot;이 보이고 원격 접속이 완료 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1025&quot; data-origin-height=&quot;771&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnxylY/btsAuNdW0aR/mMeUPEA7KKkvQcBWGaV95K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnxylY/btsAuNdW0aR/mMeUPEA7KKkvQcBWGaV95K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnxylY/btsAuNdW0aR/mMeUPEA7KKkvQcBWGaV95K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnxylY%2FbtsAuNdW0aR%2FmMeUPEA7KKkvQcBWGaV95K%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;1025&quot; height=&quot;771&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;771&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Explorer를 선택한 후 ② Open Folder를 클릭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1230&quot; data-origin-height=&quot;766&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bswYxP/btsAuwDwZjA/1c8SfkT7saqfk7BBy8LEN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bswYxP/btsAuwDwZjA/1c8SfkT7saqfk7BBy8LEN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bswYxP/btsAuwDwZjA/1c8SfkT7saqfk7BBy8LEN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbswYxP%2FbtsAuwDwZjA%2F1c8SfkT7saqfk7BBy8LEN0%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;1230&quot; height=&quot;766&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버에서 작업하고자 하는 폴더를 선택하면 passphrase를 한번 더 물어보고 입력하면 위와 같이 서버의 파일을 직접 컨트롤 할 수 있게 됩니다. 또한 파일을 실행하게 되면 로컬 환경이 아닌 서버에서 실행됩니다. 즉 서버의 IP를 가지고 실행되는 것이기 때문에 API Key 같은 경우도 서버의 것을 이용하면 됩니다.&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;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 시간에는 파이썬을 VS Code를 이용해 원격 개발하는 방법을 알아보았는데요. 과정중에 Private Key의 Permission이 중요하다는 사실 또한 다시 한번 알게 되었습니다.&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;VS Code는 무료이고 간편하지만 아주 파워풀한 기능을 가지고 있고 다양한 플러그인이 있어 향후 개발 도구로 활용하면 좋을 것 같네요.&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;</description>
      <category>코딩스토리/개발관련</category>
      <category>vs code</category>
      <category>vscode</category>
      <category>VsCode리모트</category>
      <category>VSCode원격</category>
      <category>원격개발</category>
      <category>파이썬</category>
      <category>파이썬SSH</category>
      <category>파이썬리모트개발</category>
      <category>파이썬원격개발</category>
      <category>파이참</category>
      <author>Tech&amp;amp;Fin</author>
      <guid isPermaLink="true">https://technfin.tistory.com/113</guid>
      <comments>https://technfin.tistory.com/entry/VS-Code%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-SSH-%EC%9B%90%EA%B2%A9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EB%B0%8F-pem-%ED%8C%8C%EC%9D%BC-%EA%B6%8C%ED%95%9C-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95#entry113comment</comments>
      <pubDate>Fri, 17 Nov 2023 15:15:03 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 YAML 사용방법</title>
      <link>https://technfin.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-YAML-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;파이썬 YAML.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFopiI/btszC0EU8Jh/dTZC7EbZ8ZFuLFv4RN7UN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFopiI/btszC0EU8Jh/dTZC7EbZ8ZFuLFv4RN7UN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFopiI/btszC0EU8Jh/dTZC7EbZ8ZFuLFv4RN7UN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFopiI%2FbtszC0EU8Jh%2FdTZC7EbZ8ZFuLFv4RN7UN0%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;960&quot; height=&quot;540&quot; data-filename=&quot;파이썬 YAML.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;odyssey-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차 - 클릭하면 이동합니다.&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;YAML이란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;YAML은 한글로 읽는 방법이 정해져 있지는 않지만 일반적으로 야믈이라고 읽고 있습니다. 이 YAML(야믈) 파일은 파이썬에서만 사용하는 특정한 양식은 아니고 프로그래밍을 하면서 접하게 되는 많은 파일 형식 중에 하나라고 보시면 됩니다.&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;주로 환경 파일을 작성하는데 사용되는 형식으로 JSON, XML 형식등과 비슷한 것이라고 생각하시면 됩니다.&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;YAML파일의 장점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;YAML(야믈) 파일의 장점을 이야기하려면 JSON 형식과 비교를 하는 것이 좋을 것 같은데요. 그럼 먼저 JSON 파일의 문법을 살펴 보겠습니다.&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;JSON 형식&lt;/h3&gt;
&lt;pre id=&quot;code_1698901441206&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;name&quot;,
  &quot;description&quot;: &quot;description&quot;,
  &quot;license&quot;: &quot;MIT&quot;,
  &quot;version&quot;: &quot;1.0.0&quot;,
  &quot;array&quot;: [&quot;1&quot;, &quot;2&quot;, &quot;3&quot;],
  &quot;author&quot;: {
    &quot;name&quot;: &quot;Tech&amp;amp;Fin&quot;,
    &quot;url&quot;: &quot;https://technfin.tistory.com/&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSON은 위와 같이 {} 괄호를 사용합니다. 단계적인 트리 구조를 만들 수 있으며 괄호안에 괄호를 사용하여 하위 변수를 관리할 수 있습니다.&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;YAML 형식&lt;/h3&gt;
&lt;pre id=&quot;code_1698901668394&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;---
name: name
description: description
license: MIT
version: 1.0.0
# 배열사용
array:
- '1'
- '2'
- '3'
author:
  name: Tech&amp;amp;Fin
  url: https://technfin.tistory.com/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 내용을 YAML 형식으로 변경하면 위와 같이 만들 수 있습니다.&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;YAML 형식의 장점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 괄호가 사라지니 전체적인 글자수가 줄어 들게 됩니다. 파일 전송 시 파일 사이즈가 즐어들어 리소스 낭비가 줄어 듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 간결해진 문법 덕에 가독성이 뛰어납니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 파일 내 주석을 사용할 수 있습니다.&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;YAML 파일 사용법&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기본 문법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;key: value 형태로 key에 value를 매핑하여 사용합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Value 타입&lt;/h3&gt;
&lt;pre id=&quot;code_1698903367993&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int type: 1
string type : &quot;string&quot;
boolean type : true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 3가지의 자료형이 사용 가능 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;하위 구조 및 배열&lt;/h3&gt;
&lt;pre id=&quot;code_1698903472053&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;key:
  sub_key:
  sub_key1:
    - list1
    - list2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 하위 구조는 인덴트(들여쓰기)로 구분하고 변수 내 배열은 -(마이너스) 기호를 사용하여 표현합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;텍스트&lt;/h3&gt;
&lt;pre id=&quot;code_1698903689574&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Output
# This text treated with line break.
# Next line.
text_line_break: |
  This text treated with line break.
  Next line.

# Output
# This text treated without line break.Line Break will be ignored.
text_line_ignore: &amp;gt;
  This text treated without line break.
  Line Break will be ignored.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;| 는 줄바꿈이 포함되고, &amp;gt; 는 줄바꿈이 무시됩니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;YAML 파일을 파이썬에서 사용하여 각종 환경변수를 관리하면 편리합니다. 추후 저희가 진행하는 프로젝트에서도 YAML파일을 이용하여 환경변수를 관리할 예정이오니 참고하시면 좋을 것 같습니다.&lt;/p&gt;</description>
      <category>코딩스토리/파이썬</category>
      <category>config</category>
      <category>JSON</category>
      <category>PYTHON YAML</category>
      <category>xml</category>
      <category>YAML</category>
      <category>야믈</category>
      <category>파이썬CONFIG</category>
      <category>파이썬YAML</category>
      <category>파이썬야믈</category>
      <category>환경변수</category>
      <author>Tech&amp;amp;Fin</author>
      <guid isPermaLink="true">https://technfin.tistory.com/112</guid>
      <comments>https://technfin.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-YAML-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95#entry112comment</comments>
      <pubDate>Thu, 2 Nov 2023 14:43:49 +0900</pubDate>
    </item>
    <item>
      <title>Tech&amp;amp;Fin 후원 방법 안내</title>
      <link>https://technfin.tistory.com/entry/TechFin-%ED%9B%84%EC%9B%90-%EB%B0%A9%EB%B2%95-%EC%95%88%EB%82%B4</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;썸네일_2022_03-001.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pVncN/btsdZqzeORx/Xa7kVjunw1Nj065i71muBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pVncN/btsdZqzeORx/Xa7kVjunw1Nj065i71muBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pVncN/btsdZqzeORx/Xa7kVjunw1Nj065i71muBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpVncN%2FbtsdZqzeORx%2FXa7kVjunw1Nj065i71muBk%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;960&quot; height=&quot;540&quot; data-filename=&quot;썸네일_2022_03-001.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&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;다양한 포스팅을 올리는데 동기 부여가 될 수 있도록 테크앤핀 블로그의 공식 후원 방법을 개설하였습니다. 토스를 통해 후원하실 수 있으며 후원금은 테크앤 핀 블로그의 포스팅 발전에 사용됩니다.&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;블로그 내용이 도움이 되셨거나 테크앤핀을 응원하고 싶으신 분들은 아래 링크를 클릭하여 토스(Toss)를 통해 후원하실 수 있습니다.&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&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;테크앤핀블로그후원하기.png&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;265&quot;&gt;&lt;a href=&quot;https://toss.me/techandfin&quot; target=&quot;_blank&quot; title=&quot;Tech&amp;amp;amp;Fin 공식 후원계좌&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/veUAK/btsdZAInprn/pdVSLDr2eyGiV634l0wHx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FveUAK%2FbtsdZAInprn%2FpdVSLDr2eyGiV634l0wHx1%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;756&quot; height=&quot;265&quot; data-filename=&quot;테크앤핀블로그후원하기.png&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>공지사항</category>
      <author>Tech&amp;amp;Fin</author>
      <guid isPermaLink="true">https://technfin.tistory.com/111</guid>
      <comments>https://technfin.tistory.com/entry/TechFin-%ED%9B%84%EC%9B%90-%EB%B0%A9%EB%B2%95-%EC%95%88%EB%82%B4#entry111comment</comments>
      <pubDate>Sat, 6 May 2023 08:48:47 +0900</pubDate>
    </item>
  </channel>
</rss>