<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>게으른 에벌레의 코딩월드</title>
    <link>https://lazycaterpillar.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 9 Apr 2026 22:21:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>catcoder</managingEditor>
    <image>
      <title>게으른 에벌레의 코딩월드</title>
      <url>https://tistory1.daumcdn.net/tistory/6547830/attach/59cc19cbc5ca42e9acc336a0cc082f0d</url>
      <link>https://lazycaterpillar.tistory.com</link>
    </image>
    <item>
      <title>Claude로 할 수 있는 것들</title>
      <link>https://lazycaterpillar.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Claude, 너가 할 수 있는게 뭐야?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #f0eee5; color: #29261b; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;글쓰기 - 제가 에세이, 기사, 블로그 포스트, 소설, 시 등 다양한 장르와 주제의 글쓰기를 도와드릴 수 있습니다. 아이디어 제안부터 초안 작성, 교정 및 윤색까지 글쓰기의 전 과정에 제가 기여할 수 있어요.&lt;/li&gt;
&lt;li&gt;정보 검색 및 리서치 - 어떤 주제에 대해서든 신뢰할 수 있는 정보와 자료를 찾아드릴 수 있습니다. 전문 자료 찾기부터 검색 결과 요약 정리까지 리서치 활동을 지원해드려요.&lt;/li&gt;
&lt;li&gt;데이터 분석 - 각종 데이터를 다각도로 분석하고 인사이트를 도출해낼 수 있습니다. 통계 분석, 시각화, 머신러닝 기법 등을 활용해 데이터에서 의미있는 패턴과 발견점을 찾아내지요.&lt;/li&gt;
&lt;li&gt;코딩 및 프로그래밍 - Python, Java, C++ 등 다양한 프로그래밍 언어로 코딩을 할 수 있고, 소프트웨어 개발 과정에서 코드 리뷰, 디버깅, 알고리즘 설계 등을 지원합니다.&lt;/li&gt;
&lt;li&gt;번역 - 영어, 중국어, 일본어, 스페인어, 프랑스어 등 주요 언어 간 번역을 제공할 수 있습니다. 문서 번역은 물론 웹사이트 번역, 영상 자막 번역 등 다양한 콘텐츠에 대응 가능해요.&lt;/li&gt;
&lt;li&gt;일정 및 작업 관리 - 할 일 목록 정리, 일정 계획 수립, 프로젝트 관리 등 업무 생산성 향상을 위한 방법을 제안하고 적용을 도와드립니다.&lt;/li&gt;
&lt;li&gt;창의적 아이디어 제안 - 브레인스토밍, 마인드맵, SCAMPER 등 창의적 사고 기법을 활용해 아이디어 발상을 도와드립니다. 문제 해결, 신제품 개발, 마케팅 기획 등 다방면에서 창의적 인사이트를 제공할 수 있어요.&lt;/li&gt;
&lt;li&gt;Q&amp;amp;A 및 문제 해결 - 어떤 질문이든 최선을 다해 답변 드리고, 문제 상황을 분석하여 가능한 해결책을 모색하고 제시해드립니다. 지식, 경험, 논리적 사고를 총 동원해 문제 해결을 지원하지요.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: Cluade 3 Opus 유료버전&lt;/p&gt;</description>
      <category>AI</category>
      <category>Ai</category>
      <category>cluade</category>
      <category>cluade vs. gpt</category>
      <category>GPT</category>
      <category>인공지능</category>
      <author>catcoder</author>
      <guid isPermaLink="true">https://lazycaterpillar.tistory.com/65</guid>
      <comments>https://lazycaterpillar.tistory.com/65#entry65comment</comments>
      <pubDate>Thu, 18 Apr 2024 16:45:04 +0900</pubDate>
    </item>
    <item>
      <title>Technical Interview Question and Answer for Junior Backend Developer (1)</title>
      <link>https://lazycaterpillar.tistory.com/64</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Python&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #374151; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Q: What are Python decorators and how do you use them?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;A:&lt;/b&gt; A Python decorator is a design pattern that allows you to modify the behavior of a function or class. It's typically used for adding functionality to existing code in a modular and readable way. Decorators are applied using the '@' symbol before a function or method.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Q: Can you explain the difference between lists and tuples in Python?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;A:&lt;/b&gt; Lists and tuples are both sequence data types that can store a collection of items. Lists are mutable, meaning they can be modified after their creation, while tuples are immutable. Lists use square brackets [], whereas tuples use parentheses ().&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Django&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #374151; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Q: What is the role of the ORM in Django?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;A:&lt;/b&gt; The Object-Relational Mapper (ORM) in Django allows developers to interact with the database in a Pythonic way, by converting database queries into Python objects and vice versa. This means developers can use Python code instead of writing raw SQL queries.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Q: Explain the MTV (Model-Template-View) architecture in Django.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;A:&lt;/b&gt; In Django, MTV stands for Model-Template-View:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Model&lt;/b&gt;: Represents the data structure. It's a Python class that maps to a database table.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Template&lt;/b&gt;: Handles the presentation layer. It's where you create the HTML files with Django template language.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;View&lt;/b&gt;: Contains the business logic and interacts with the model to fetch data, which is then passed to the template.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;AWS&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #374151; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Q: Describe what a VPC is and its use in AWS.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;A:&lt;/b&gt; A Virtual Private Cloud (VPC) in AWS is a virtual network dedicated to your AWS account. It allows you to launch AWS resources in a network that you define. It's used for setting up a secure and isolated section of the AWS cloud to run your applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Q: How does AWS S3 work and what are its common uses?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;A:&lt;/b&gt; AWS S3 (Simple Storage Service) is an object storage service that offers scalability, data availability, security, and performance. It's used for storing and protecting any amount of data for various use cases, like websites, mobile applications, backup and restore, and big data analytics.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;API &amp;amp; Postman&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #374151; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Q: What are RESTful APIs and what principles do they follow?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;A:&lt;/b&gt; RESTful APIs are application programming interfaces that adhere to the constraints of REST (Representational State Transfer) architectural style. They operate over HTTP, and their principles include statelessness, a client-server architecture, cacheability, layered system, and uniform interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Q: How do you use Postman for API testing?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;A:&lt;/b&gt; Postman is used for API testing by creating and sending HTTP requests to an API endpoint. You can test various HTTP methods (GET, POST, PUT, DELETE, etc.), inspect the response, and validate the behavior of the API. Postman also allows for automated testing through scripting and collection runners.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>Job hunting</category>
      <category>Backend Developer</category>
      <category>developer job hunting</category>
      <category>Django</category>
      <category>job hunting</category>
      <category>junior developer</category>
      <category>Python</category>
      <category>tech interview</category>
      <author>catcoder</author>
      <guid isPermaLink="true">https://lazycaterpillar.tistory.com/64</guid>
      <comments>https://lazycaterpillar.tistory.com/64#entry64comment</comments>
      <pubDate>Mon, 22 Jan 2024 11:06:42 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu - SSH 로그인 접속 시 퍼미션 문제</title>
      <link>https://lazycaterpillar.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH 로그인 접속 시 퍼미션 문제 (UNPROTECTED PRIVATE KEY FILE)잘못된 퍼미션으로 SSH 로그인 접속 시 위와 같은 같은 에러가 다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WARNING: UNPROTECTED PRIVATE KEY FILE!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;Permissions 0644 for '/Users/username/.ssh/your-key.pem' are too open.It is required that your private key files are NOT accessible by others.This private key will be ignored.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;private key의 퍼미션이 너무 공개되어 있어서 생긴 문제였다. 해당 private key의 퍼미션을 644에서 600으로 바꿔서 해결하였다.&lt;/p&gt;
&lt;pre id=&quot;code_1705049020876&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 600 ~/.ssh/your-key.pem&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;아래 깃헙에서 참고하였다. 위 ssh 주소는 자신의 pem 이 있는 주소를 써야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/rangyu/TIL/blob/master/ubuntu/SSH-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%A0%91%EC%86%8D-%EC%8B%9C-%ED%8D%BC%EB%AF%B8%EC%85%98-%EB%AC%B8%EC%A0%9C-UNPROTECTED-PRIVATE-KEY-FILE.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/rangyu/TIL/blob/master/ubuntu/SSH-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%A0%91%EC%86%8D-%EC%8B%9C-%ED%8D%BC%EB%AF%B8%EC%85%98-%EB%AC%B8%EC%A0%9C-UNPROTECTED-PRIVATE-KEY-FILE.md&lt;/a&gt;&lt;/p&gt;</description>
      <category>Today I Learned (TIL)</category>
      <category>ubuntu</category>
      <category>우분투</category>
      <author>catcoder</author>
      <guid isPermaLink="true">https://lazycaterpillar.tistory.com/63</guid>
      <comments>https://lazycaterpillar.tistory.com/63#entry63comment</comments>
      <pubDate>Fri, 12 Jan 2024 17:44:50 +0900</pubDate>
    </item>
    <item>
      <title>브랜치 전략과 PEP 설정</title>
      <link>https://lazycaterpillar.tistory.com/62</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트&amp;nbsp;기획&amp;nbsp;시&amp;nbsp;브랜치&amp;nbsp;전략과&amp;nbsp;PEP&amp;nbsp;설정은&amp;nbsp;팀의&amp;nbsp;개발&amp;nbsp;방식,&amp;nbsp;프로젝트의&amp;nbsp;특성,&amp;nbsp;팀&amp;nbsp;구성원의&amp;nbsp;규모&amp;nbsp;등&amp;nbsp;여러&amp;nbsp;요소에&amp;nbsp;의해&amp;nbsp;결정됩니다.&amp;nbsp;아래는&amp;nbsp;일반적인&amp;nbsp;가이드라인과&amp;nbsp;예시에&amp;nbsp;대한&amp;nbsp;설명입니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.&amp;nbsp;브랜치&amp;nbsp;전략&amp;nbsp;(Branching&amp;nbsp;Strategy):&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;가장&amp;nbsp;일반적인&amp;nbsp;전략:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Main 브랜치:&lt;/span&gt; 메인 코드베이스가 저장되는 곳으로, 항상 배포 가능한 상태를 유지해야 합니다.&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Develop 브랜치:&lt;/span&gt; 개발 중인 기능들이 통합되는 곳입니다. 팀원들은 개발을 시작하기 전에 이 브랜치를 기준으로 가져와 작업합니다.&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Feature 브랜치:&lt;/span&gt; 각 기능은 별도의 브랜치에서 개발되며, 개발이 완료되면 Develop 브랜치로 병합됩니다.&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Release 브랜치:&lt;/span&gt; 개발이 완료되어 배포를 준비할 때 사용하는 브랜치로, 버그 수정이나 작은 기능 추가 등이 이루어집니다.&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Hotfix&amp;nbsp;브랜치:&amp;nbsp;&lt;/span&gt;배포&amp;nbsp;중&amp;nbsp;발생한&amp;nbsp;급한&amp;nbsp;버그를&amp;nbsp;수정하기&amp;nbsp;위한&amp;nbsp;브랜치입니다.&amp;nbsp;Main과&amp;nbsp;Develop&amp;nbsp;브랜치에서&amp;nbsp;생성됩니다.&lt;br /&gt;&lt;br /&gt;예시:&lt;br /&gt;Feature 브랜치 생성: feature/login-page, feature/user-profile&lt;br /&gt;Release 브랜치 생성: release/1.0.0&lt;br /&gt;Hotfix&amp;nbsp;브랜치&amp;nbsp;생성:&amp;nbsp;hotfix/1.0.1&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.&amp;nbsp;PEP&amp;nbsp;설정&amp;nbsp;(Python&amp;nbsp;Enhancement&amp;nbsp;Proposal):&lt;/b&gt;&lt;br /&gt;Python&amp;nbsp;프로젝트에서는 PEP을&amp;nbsp;따르는&amp;nbsp;것이&amp;nbsp;좋습니다.&amp;nbsp;PEP는&amp;nbsp;Python&amp;nbsp;커뮤니티에서&amp;nbsp;Python&amp;nbsp;언어의&amp;nbsp;변화나&amp;nbsp;새로운&amp;nbsp;기능&amp;nbsp;등을&amp;nbsp;표준화하기&amp;nbsp;위한&amp;nbsp;문서입니다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;PEP 8:&lt;/span&gt; 코드 스타일 가이드. 코드의 가독성을 높이고 일관성을 유지하기 위한 규칙을 정의합니다.&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;PEP 20&lt;/span&gt; (The Zen of Python): 파이썬의 설계 철학을 담은 문서로, 코드 작성시의 원칙을 담고 있습니다.&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;PEP&amp;nbsp;257:&amp;nbsp;&lt;/span&gt;Docstring의&amp;nbsp;작성&amp;nbsp;규칙을&amp;nbsp;정의합니다.&amp;nbsp;프로젝트의&amp;nbsp;문서화에&amp;nbsp;도움이&amp;nbsp;됩니다.&lt;br /&gt;&lt;br /&gt;이러한&amp;nbsp;PEP들을&amp;nbsp;프로젝트&amp;nbsp;초기에&amp;nbsp;설정하고,&amp;nbsp;팀원들&amp;nbsp;간에&amp;nbsp;일관된&amp;nbsp;코딩&amp;nbsp;스타일과&amp;nbsp;가이드를&amp;nbsp;유지하는&amp;nbsp;것이&amp;nbsp;좋습니다.&amp;nbsp;일반적으로&amp;nbsp;linter&amp;nbsp;도구를&amp;nbsp;사용하여&amp;nbsp;PEP&amp;nbsp;8을&amp;nbsp;준수하도록&amp;nbsp;코드를&amp;nbsp;검사하고,&amp;nbsp;코드&amp;nbsp;리뷰에서&amp;nbsp;PEP에&amp;nbsp;맞게&amp;nbsp;작성되었는지&amp;nbsp;확인하는&amp;nbsp;등의&amp;nbsp;방법을&amp;nbsp;사용합니다.&lt;br /&gt;&lt;br /&gt;이러한&amp;nbsp;브랜치&amp;nbsp;전략과&amp;nbsp;PEP&amp;nbsp;설정은&amp;nbsp;프로젝트의&amp;nbsp;확장성과&amp;nbsp;유지보수성을&amp;nbsp;높이기&amp;nbsp;위해&amp;nbsp;중요합니다.&amp;nbsp;그러나&amp;nbsp;각&amp;nbsp;프로젝트는&amp;nbsp;독특한&amp;nbsp;요구사항이&amp;nbsp;있으므로,&amp;nbsp;팀이&amp;nbsp;합의하고&amp;nbsp;프로젝트의&amp;nbsp;특성에&amp;nbsp;맞게&amp;nbsp;조절하는&amp;nbsp;것이&amp;nbsp;중요합니다.&lt;/p&gt;</description>
      <category>Today I Learned (TIL)</category>
      <category>Branch</category>
      <category>Branching Strategy</category>
      <category>PEP</category>
      <category>Python Enhancement Proposal</category>
      <author>catcoder</author>
      <guid isPermaLink="true">https://lazycaterpillar.tistory.com/62</guid>
      <comments>https://lazycaterpillar.tistory.com/62#entry62comment</comments>
      <pubDate>Thu, 7 Dec 2023 17:38:45 +0900</pubDate>
    </item>
    <item>
      <title>Docker - 도커 내에서 db 확인 하는법</title>
      <link>https://lazycaterpillar.tistory.com/61</link>
      <description>&lt;pre id=&quot;code_1701344094147&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어를 통해 db의 container ID 를 찾는다. (ex. CONTAINER ID: f137e2493a23 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1701350058563&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it &amp;lt;CONTAINER ID&amp;gt; /bin/bash&lt;/code&gt;&lt;/pre&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_1701350093382&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;psql -U postgres&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 postgresql을 사용하고 있기 때문에 이 명령어로 postgres에 접속한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1701350129589&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;\dt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;postgres에 있는 모든 table을 확인할 수 있다.&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;그런데 아직 db를 확인하는 방법을 못찾음;;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;to be continued...&lt;/p&gt;</description>
      <category>Today I Learned (TIL)</category>
      <category>docker postgre</category>
      <category>docker에서 db 보기</category>
      <category>postgre</category>
      <author>catcoder</author>
      <guid isPermaLink="true">https://lazycaterpillar.tistory.com/61</guid>
      <comments>https://lazycaterpillar.tistory.com/61#entry61comment</comments>
      <pubDate>Thu, 30 Nov 2023 22:17:08 +0900</pubDate>
    </item>
    <item>
      <title>Docker - 터미널에서 docker container 들어가는 법</title>
      <link>https://lazycaterpillar.tistory.com/60</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;도커가 돌아가고 있다. 이 상태에서는 도커를 쓰지 않는 환경과는 달라서, 일반적인 python manage.py makemigrations 를 쓸 수 없다. 그래서 도커 컨테이너 안으로 들어가야 이 작업들을 할 수 있게 된다. 컨테이너 안으로 들어가는 방법은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1701246317705&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어를 통해 container ID 를 알 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1701246354314&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps -a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-a 는 all 을 뜻한다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;container ID&lt;span&gt; 뿐만 아니라 숨긴폴더까지 확인할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1701246399098&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it &amp;lt;container ID&amp;gt; /bin/bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;container ID&amp;gt; 에는 본인의 id 를 작성하면 된다. 예를들면,&lt;/p&gt;
&lt;pre id=&quot;code_1701246438622&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it 591428ed0a24 /bin/bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 작성하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 컨테이너 안으로 들어오게 된것이다. 이 상태로 계속 터미널을 이용해도 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 git 을 사용하려고 하는데, 도커 컨테이너 안에서는 git 사용이 안되는 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너에서 빠져나오고 싶다면 도커가 돌아가는 터미널을 끄고 (command + C) 다음 명령어를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1701246658274&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose down&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커를 다운시키고 다시 upload 해서 돌아가게 만든다.&lt;/p&gt;
&lt;pre id=&quot;code_1701246689204&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose up&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 git 사용이 가능하다.&lt;/p&gt;</description>
      <category>Today I Learned (TIL)</category>
      <category>docker</category>
      <category>docker container</category>
      <category>docker container 들어가는 법</category>
      <category>도커 사용법</category>
      <category>도커 컨테이너</category>
      <category>도커 컨테이너 들어가기</category>
      <author>catcoder</author>
      <guid isPermaLink="true">https://lazycaterpillar.tistory.com/60</guid>
      <comments>https://lazycaterpillar.tistory.com/60#entry60comment</comments>
      <pubDate>Wed, 29 Nov 2023 17:32:30 +0900</pubDate>
    </item>
    <item>
      <title>Django - import 아임포트 결제 시스템 구현하기</title>
      <link>https://lazycaterpillar.tistory.com/58</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;Frontend&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 포트원 SDK 설치&lt;/p&gt;
&lt;div style=&quot;background-color: #000000; color: #334155; text-align: start;&quot; data-rehype-pretty-code-fragment=&quot;&quot;&gt;
&lt;pre class=&quot;css&quot; style=&quot;background-color: #fafafa;&quot; data-theme=&quot;default&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;npm i @portone/browser-sdk&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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. index.html head 안에 아임포트 sdk 라이브러리 추가&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700727907921&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//index.html 

	&amp;lt;!-- 포트원 JavaScript SDK 로드 --&amp;gt;
      &amp;lt;script src=&quot;https://cdn.iamport.kr/v1/iamport.js&quot;&amp;gt;&amp;lt;/script&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;3. 결제 요청하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;src/components/ 아래에 PaymentComponents.js 파일을 만들어 결제 요청 코드를 작성했다.&amp;nbsp;&lt;br /&gt;function 안에 PortOne.requestPayment 하위 내용은 결제정보를 다듬어야 한다. (특히 storeId는 우리걸로 변경해야함)&lt;/p&gt;
&lt;pre id=&quot;code_1700728246872&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import React from 'react';
import * as PortOne from '@portone/browser-sdk/v2';

function PaymentComponent() {
  const requestPayment = () =&amp;gt; {
    PortOne.requestPayment({
      storeId: 'store-4ff4af41-85e3-4559-8eb8-0d08a2c6ceec',
      paymentId: `paymentId_${Date.now()}`,
      orderName: '나무프레임',
      totalAmount: 1000,
      currency: 'CURRENCY_KRW',
      pgProvider: 'PG_PROVIDER_TOSSPAYMENTS',
      payMethod: 'CARD'
    });
  };

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h1&amp;gt;Your Payment Page&amp;lt;/h1&amp;gt;
      &amp;lt;button onClick={requestPayment}&amp;gt;Request Payment&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

export default PaymentComponent;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Backend&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 결제검증 API 구현하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;portone에 나와있는 예시는 아래의 첫번째 코드와 같이 Node.js 버전으로 작성되어 있다. 우리는 Django를 사용하고 있기 때문에 Chat GPT의 도움을 받아 예시를 받았고 두번째 코드에서 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700728438664&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Express.js

// bodyParser 등을 통해 body의 JSON 데이터를 파싱할 수 있는지 확인해주세요.
app.use(bodyParser.json());
// POST 요청을 받는 /payments/complete
app.post(&quot;/payments/complete&quot;, async (req, res) =&amp;gt; {
  try {
    // 요청의 body로 SDK의 응답 중 txId와 paymentId가 오기를 기대합니다.
    const { txId, paymentId } = req.body;
    
    // 1. 포트원 API를 사용하기 위해 액세스 토큰을 발급받습니다.
    const signinResponse = await axios({
      url: &quot;https://api.portone.io/v2/signin/api-key&quot;,
      method: &quot;post&quot;,
      headers: { &quot;Content-Type&quot;: &quot;application/json&quot; },
      data: {
        api_key: PORTONE_API_KEY, // 포트원 API Key
      },
    });
    const { access_token } = signinResponse.data;
    
    // 2. 포트원 결제내역 단건조회 API 호출
    const paymentResponse = await axios({
      url: `https://api.portone.io/v2/payments/${paymentId}`,
      method: &quot;get&quot;,
      // 1번에서 발급받은 액세스 토큰을 Bearer 형식에 맞게 넣어주세요.
      headers: { &quot;Authorization&quot;: &quot;Bearer &quot; + access_token },
    });
    const { payment: { id, transactions } } = paymentResponse.data;
    // 대표 트랜잭션(승인된 트랜잭션)을 선택합니다.
    const transaction = transactions.find(tx =&amp;gt; tx.is_primary === true);
    
    // 3. 가맹점 내부 주문 데이터의 가격과 실제 지불된 금액을 비교합니다.
    const order = await OrderService.findById(id);
    if (order.amount === transaction.amount.total) {
      switch (status) {
        case &quot;VIRTUAL_ACCOUNT_ISSUED&quot;: {
          const { virtual_account } = transaction.payment_method_detail;
          // 가상 계좌가 발급된 상태입니다.
          // 계좌 정보(virtual_account)를 이용해 원하는 로직을 구성하세요.
          break;
        }
        case &quot;PAID&quot;: {
          // 모든 금액을 지불했습니다! 완료 시 원하는 로직을 구성하세요.
          break;
        }
      }
    } else {
      // 결제 금액이 불일치하여 위/변조 시도가 의심됩니다.
    }
  } catch (e) {
    // 결제 검증에 실패했습니다.
    res.status(400).send(e);
  }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700728475504&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# views.py

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import requests

@csrf_exempt
def complete_payment(request):
    try:
        # 요청의 body로 SDK의 응답 중 txId와 paymentId가 오기를 기대합니다.
        data = request.POST  # 또는 request.body를 사용하여 데이터를 추출

        # 1. 포트원 API를 사용하기 위해 액세스 토큰을 발급받습니다.
        signin_response = requests.post(
            &quot;https://api.portone.io/v2/signin/api-key&quot;,
            headers={&quot;Content-Type&quot;: &quot;application/json&quot;},
            json={&quot;api_key&quot;: &quot;PORTONE_API_KEY&quot;}  # 포트원 API Key
        )
        access_token = signin_response.json()[&quot;access_token&quot;]

        # 2. 포트원 결제내역 단건조회 API 호출
        payment_response = requests.get(
            f&quot;https://api.portone.io/v2/payments/{data['paymentId']}&quot;,
            headers={&quot;Authorization&quot;: f&quot;Bearer {access_token}&quot;}
        )
        payment_data = payment_response.json()[&quot;payment&quot;]
        transactions = payment_data[&quot;transactions&quot;]
        # 대표 트랜잭션(승인된 트랜잭션)을 선택합니다.
        transaction = next(tx for tx in transactions if tx[&quot;is_primary&quot;])

        # 3. 가맹점 내부 주문 데이터의 가격과 실제 지불된 금액을 비교합니다.
        order = OrderService.find_by_id(payment_data[&quot;id&quot;])
        if order.amount == transaction[&quot;amount&quot;][&quot;total&quot;]:
            if transaction[&quot;status&quot;] == &quot;VIRTUAL_ACCOUNT_ISSUED&quot;:
                virtual_account = transaction[&quot;payment_method_detail&quot;][&quot;virtual_account&quot;]
                # 가상 계좌가 발급된 상태입니다.
                # 계좌 정보(virtual_account)를 이용해 원하는 로직을 구성하세요.
            elif transaction[&quot;status&quot;] == &quot;PAID&quot;:
                # 모든 금액을 지불했습니다! 완료 시 원하는 로직을 구성하세요.
            return JsonResponse({&quot;success&quot;: True})
        else:
            # 결제 금액이 불일치하여 위/변조 시도가 의심됩니다.
            return JsonResponse({&quot;error&quot;: &quot;Invalid payment amount&quot;}, status=400)

    except Exception as e:
        # 결제 검증에 실패했습니다.
        return JsonResponse({&quot;error&quot;: str(e)}, status=400)&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;// 이 코드는 Django에서 외부 API 호출을 위해 requests 라이브러리를 사용하고 있습니다. Django에서는 CSRF 보호를 기본으로 사용하고 있기 때문에 @csrf_exempt 데코레이터를 사용하여 CSRF 보호를 비활성화하였습니다. 이는 보안상 주의해야 할 점이므로 사용 시 유의하시기 바랍니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 이 코드를 사용하기 위해서는 필요한 Django 모델 및 서비스(OrderService)에 대한 정의가 필요합니다. 이 부분은 프로젝트의 구조와 데이터 모델에 따라 적절하게 조정되어야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Django</category>
      <category>Import</category>
      <category>portone</category>
      <category>아임포트 api</category>
      <category>아임포트 연결</category>
      <category>아임포트 포트원 장고</category>
      <author>catcoder</author>
      <guid isPermaLink="true">https://lazycaterpillar.tistory.com/58</guid>
      <comments>https://lazycaterpillar.tistory.com/58#entry58comment</comments>
      <pubDate>Fri, 24 Nov 2023 12:29:17 +0900</pubDate>
    </item>
    <item>
      <title>Bash 와 Powershell의 차이점</title>
      <link>https://lazycaterpillar.tistory.com/57</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Bash와 PowerShell은 각각 Unix/Linux 및 Windows 운영 체제에서 사용되는 셸(Shell)입니다. 여기에는 몇 가지 중요한 차이점이 있습니다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;운영 체제 호환성:&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;bash는 주로 Unix 및 Linux 시스템&lt;/span&gt;에서 사용되는 명령 줄 셸이며, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;macOS와 같은 Unix 기반 운영 체제에서도 사용&lt;/span&gt;됩니다.&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;PowerShell은&amp;nbsp;주로&amp;nbsp;Windows&amp;nbsp;운영&amp;nbsp;체제&lt;/span&gt;에서&amp;nbsp;사용되는&amp;nbsp;명령&amp;nbsp;줄&amp;nbsp;셸&amp;nbsp;및&amp;nbsp;스크립팅&amp;nbsp;언어입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;문법 및 명령어:&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;bash는&amp;nbsp;Unix&amp;nbsp;및&amp;nbsp;Linux의&amp;nbsp;전통적인&amp;nbsp;명령어&amp;nbsp;및&amp;nbsp;문법을&amp;nbsp;따릅니다.&lt;/span&gt;&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;디렉터리&amp;nbsp;이동은&amp;nbsp;cd이며,&amp;nbsp;현재&amp;nbsp;작업&amp;nbsp;디렉터리는&amp;nbsp;$PWD로&amp;nbsp;참조됩니다.&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;PowerShell은&amp;nbsp;.NET&amp;nbsp;프레임워크에&amp;nbsp;기반한&amp;nbsp;객체&amp;nbsp;지향적인&amp;nbsp;스크립팅&amp;nbsp;언어&lt;/span&gt;이며,&amp;nbsp;명령어는&amp;nbsp;동사-명사&amp;nbsp;구조를&amp;nbsp;따르며&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;Get-Process,&amp;nbsp;Get-ChildItem&amp;nbsp;등이&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;자동화 및 스크립팅:&lt;br /&gt;PowerShell은&amp;nbsp;.NET&amp;nbsp;프레임워크와의&amp;nbsp;통합으로&amp;nbsp;Windows&amp;nbsp;시스템의&amp;nbsp;강력한&amp;nbsp;자동화&amp;nbsp;및&amp;nbsp;스크립팅을&amp;nbsp;지원합니다.&amp;nbsp;Windows&amp;nbsp;관리와&amp;nbsp;관련된&amp;nbsp;다양한&amp;nbsp;작업을&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;bash는&amp;nbsp;Unix&amp;nbsp;및&amp;nbsp;Linux&amp;nbsp;시스템에서의&amp;nbsp;자동화&amp;nbsp;및&amp;nbsp;스크립팅에&amp;nbsp;중점을&amp;nbsp;둡니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;환경 변수 및 경로:&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;bash&lt;/span&gt;에서는&amp;nbsp;환경&amp;nbsp;변수를&amp;nbsp;$변수명&amp;nbsp;형식으로&amp;nbsp;참조하며,&amp;nbsp;경로&amp;nbsp;구분자는&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&amp;nbsp;/&lt;/span&gt;입니다.&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;PowerShell&lt;/span&gt;에서는&amp;nbsp;환경&amp;nbsp;변수를&amp;nbsp;$env:변수명&amp;nbsp;형식으로&amp;nbsp;참조하며,&amp;nbsp;경로&amp;nbsp;구분자는&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;\&lt;/span&gt;입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;파일 및 디렉터리 경로 표기:&lt;br /&gt;bash에서는&amp;nbsp;파일&amp;nbsp;및&amp;nbsp;디렉터리&amp;nbsp;경로는&amp;nbsp;/를&amp;nbsp;사용하며,&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;/home/user/documents와&amp;nbsp;같이&amp;nbsp;표현됩니다.&lt;br /&gt;PowerShell에서는&amp;nbsp;\를&amp;nbsp;사용하며,&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;C:\Users\User\Documents와&amp;nbsp;같이&amp;nbsp;표현됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;표준 입출력 및 파이프라인:&lt;br /&gt;bash에서는&amp;nbsp;표준&amp;nbsp;입출력&amp;nbsp;및&amp;nbsp;파이프라인을&amp;nbsp;효과적으로&amp;nbsp;사용하여&amp;nbsp;여러&amp;nbsp;명령어를&amp;nbsp;결합할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;PowerShell도&amp;nbsp;표준&amp;nbsp;입출력과&amp;nbsp;파이프라인을&amp;nbsp;지원하지만,&amp;nbsp;.NET&amp;nbsp;프레임워크에&amp;nbsp;기반한&amp;nbsp;객체&amp;nbsp;지향적인&amp;nbsp;성격으로&amp;nbsp;인해&amp;nbsp;데이터의&amp;nbsp;형식이&amp;nbsp;유연하게&amp;nbsp;다뤄집니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한&amp;nbsp;차이로&amp;nbsp;인해&amp;nbsp;bash와&amp;nbsp;PowerShell은&amp;nbsp;주로&amp;nbsp;각&amp;nbsp;운영&amp;nbsp;체제에서&amp;nbsp;특정&amp;nbsp;작업&amp;nbsp;및&amp;nbsp;시스템&amp;nbsp;관리를&amp;nbsp;위해&amp;nbsp;사용됩니다.&amp;nbsp;개발자&amp;nbsp;및&amp;nbsp;시스템&amp;nbsp;관리자는&amp;nbsp;운영&amp;nbsp;체제에&amp;nbsp;따라&amp;nbsp;적절한&amp;nbsp;셸을&amp;nbsp;선택하여&amp;nbsp;작업을&amp;nbsp;수행합니다.&lt;/p&gt;</description>
      <category>Today I Learned (TIL)</category>
      <category>bash</category>
      <category>bash와 powershell 차이</category>
      <category>PowerShell</category>
      <category>배시와 파워셸 차이</category>
      <author>catcoder</author>
      <guid isPermaLink="true">https://lazycaterpillar.tistory.com/57</guid>
      <comments>https://lazycaterpillar.tistory.com/57#entry57comment</comments>
      <pubDate>Wed, 22 Nov 2023 20:43:08 +0900</pubDate>
    </item>
    <item>
      <title>Dall-E 로 생성한 이미지 파일 PostgreSQL 에 잘 저장되었는지 확인하는 방법</title>
      <link>https://lazycaterpillar.tistory.com/56</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난주에 Dall-E API 연결을 끝마치고, postman으로 prompt를 작성하여 이미지 url을 받아오는 것까지 확인했다. 생성된 이미지는 데이터베이스에 저장하도록 view에 작성해놓았는데, postgresql 에서 이 이미지들이 잘 저장되었는지 확인하려고 한다. 결국에는 이 이미지들을 post로 업로드하고 싶어, 그 과정을 진행하고 있다. 우선은 postgresql 에서 dall-e를 통해 생성된 이미지를 확인해보도록 하자.&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;우선, 지난번에 했던 것과 같이 table 이름을 알아봐야 한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700463186689&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2023-11-20 at 15.53.47.png&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qeedZ/btsAFuYK8bf/bnpZP0OD60TTiTaRVDlrkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qeedZ/btsAFuYK8bf/bnpZP0OD60TTiTaRVDlrkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qeedZ/btsAFuYK8bf/bnpZP0OD60TTiTaRVDlrkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqeedZ%2FbtsAFuYK8bf%2FbnpZP0OD60TTiTaRVDlrkk%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;277&quot; height=&quot;191&quot; data-filename=&quot;Screenshot 2023-11-20 at 15.53.47.png&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;364&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;28번째 table 에 posts_generatedimage 테이블이 있는걸 확인할 수 있다. 이 테이블은 백엔드 views.py에서 다음과 같이 설정해주었기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700463317197&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class DalleAPIView(APIView):
    def post(self, request, *args, **kwargs):
        prompt = request.data.get('prompt')
        if not prompt:
            return Response({&quot;error&quot;: &quot;No prompt provided&quot;}, status=400)

        image_url = generate_image(prompt)

        # 생성된 이미지 정보를 데이터베이스에 저장
        generated_image = GeneratedImage(prompt=prompt, image_url=image_url)
        generated_image.save()
        return Response({&quot;image&quot;: str(image_url)})&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;pre id=&quot;code_1700463242112&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;SELECT * FROM posts_generatedimage;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2023-11-20 at 15.56.28.png&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CysW1/btsAF6DgJBp/igOjmsrnUVJmi0xRwQ3SqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CysW1/btsAF6DgJBp/igOjmsrnUVJmi0xRwQ3SqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CysW1/btsAF6DgJBp/igOjmsrnUVJmi0xRwQ3SqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCysW1%2FbtsAF6DgJBp%2FigOjmsrnUVJmi0xRwQ3SqK%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;1412&quot; height=&quot;494&quot; data-filename=&quot;Screenshot 2023-11-20 at 15.56.28.png&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;494&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;이미지 id 와 prompt 내용, image_url 까지 확인할 수 있다.&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;이제는 이 데이터베이스에 저장된 이미지들을 어떻게 가져와서 게시물로 Post할 수 있을지 알아보려고 한다. To be continued...&lt;/p&gt;</description>
      <category>AI</category>
      <category>Ai</category>
      <category>Dall-E</category>
      <category>Dall-E api 연결</category>
      <category>Dall-E 이미지 postgresql에 저장</category>
      <category>Dall-E 이미지 데이터베이스에 저장</category>
      <category>Dall-E 이미지 저장</category>
      <category>Dalle</category>
      <category>PostgreSQL</category>
      <category>save dall-e image in database</category>
      <category>saving dalle images to postgresql</category>
      <author>catcoder</author>
      <guid isPermaLink="true">https://lazycaterpillar.tistory.com/56</guid>
      <comments>https://lazycaterpillar.tistory.com/56#entry56comment</comments>
      <pubDate>Mon, 20 Nov 2023 15:58:58 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL - Admin4 로 data 잘 저장되었는지 확인하기 (img 포함)</title>
      <link>https://lazycaterpillar.tistory.com/55</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;postgresql을 처음 써본다. sqlite와 다르게 이 데이터베이스는 admin4로 별도로 데이터 저장여부를 확인해야 하는데, 저장여부 확인하는 방법을 알게되어 간단히 남겨놓는다.&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;먼저, Admin4 을 실행한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2023-11-17 at 10.36.49.png&quot; data-origin-width=&quot;1250&quot; data-origin-height=&quot;1302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWPpD4/btsAr382eym/0de9yp3l1xKk1N5vCYtJZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWPpD4/btsAr382eym/0de9yp3l1xKk1N5vCYtJZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWPpD4/btsAr382eym/0de9yp3l1xKk1N5vCYtJZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWPpD4%2FbtsAr382eym%2F0de9yp3l1xKk1N5vCYtJZ0%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;1250&quot; height=&quot;1302&quot; data-filename=&quot;Screenshot 2023-11-17 at 10.36.49.png&quot; data-origin-width=&quot;1250&quot; data-origin-height=&quot;1302&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;빨간 동그라미로 표시한 곳을 누르면 Query Tool 로 이동한다. 여기에서 명령어를 작성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 명령어를 작성하여, 데이터가 있는 테이블 이름을 확인한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700185476419&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public';&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;pre id=&quot;code_1700185687255&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM your_table_name WHERE your_image_column_name IS NOT NULL;&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;나는 이미지 저장이 되었는지 확인하려고 했기 때문에, your_image_column_name 에 image 라고 작성했다.&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-filename=&quot;Screenshot 2023-11-17 at 10.47.07.png&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgGDEZ/btsAp2QD14x/jHm6vCcz6Fkn4HMMgZwlO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgGDEZ/btsAp2QD14x/jHm6vCcz6Fkn4HMMgZwlO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgGDEZ/btsAp2QD14x/jHm6vCcz6Fkn4HMMgZwlO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgGDEZ%2FbtsAp2QD14x%2FjHm6vCcz6Fkn4HMMgZwlO0%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;1222&quot; height=&quot;542&quot; data-filename=&quot;Screenshot 2023-11-17 at 10.47.07.png&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;542&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;그럼 다음과 같이 id, 저장된 이미지와 content 등 백엔드 model 에서 정한대로 저장된 데이터가 확인된다.&lt;/p&gt;</description>
      <category>Today I Learned (TIL)</category>
      <category>postgre 이미지 확인</category>
      <category>PostgreSQL</category>
      <category>postgresql 데이터확인</category>
      <category>postgresql 저장된 데이터 확인</category>
      <category>데이터베이스</category>
      <author>catcoder</author>
      <guid isPermaLink="true">https://lazycaterpillar.tistory.com/55</guid>
      <comments>https://lazycaterpillar.tistory.com/55#entry55comment</comments>
      <pubDate>Fri, 17 Nov 2023 10:50:39 +0900</pubDate>
    </item>
  </channel>
</rss>