<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Zero부터 시작하는 티스토리</title>
    <link>https://zerostarting.tistory.com/</link>
    <description>개발 노하우와 IT 지식을 공유합니다.</description>
    <language>ko</language>
    <pubDate>Tue, 7 Apr 2026 11:47:02 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>시바도지</managingEditor>
    <image>
      <title>Zero부터 시작하는 티스토리</title>
      <url>https://tistory1.daumcdn.net/tistory/5209839/attach/c95a0ae934084f3fa11b13a5eb1f8bd8</url>
      <link>https://zerostarting.tistory.com</link>
    </image>
    <item>
      <title>SDLC: 소프트웨어 개발 생명 주기</title>
      <link>https://zerostarting.tistory.com/79</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SDLC(Software Development LIfe Cycle: 소프트웨어 개발 생명 주기)는 기능 정의서부터 실제 제품 출시까지의 전 과정을 아우르는 표준 개발 절차이다.&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;SDLC 내에서 대표적인 개발 방법론들&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 설명 특징&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;워터폴 모델&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;각 단계를 순차적으로 진행&lt;/td&gt;
&lt;td&gt;계획/문서 중심, 변경 어려움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;애자일 모델&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;반복(iteration)과 피드백 중심&lt;/td&gt;
&lt;td&gt;빠른 대응, 협업 강조, 유연함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;스크럼(Scrum)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;애자일의 한 방식, 스프린트 단위로 작업&lt;/td&gt;
&lt;td&gt;매일 스탠드업, 역할 분담 명확&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;칸반(Kanban)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;작업 흐름 시각화, WIP 제한&lt;/td&gt;
&lt;td&gt;비동기적 작업 흐름 관리에 유리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;폭포수 + 애자일 하이브리드&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;기획과 설계는 워터폴, 개발은 애자일&lt;/td&gt;
&lt;td&gt;대기업에서 많이 씀&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;흔히 쓰는 용어 요약&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%;&quot;&gt;기능 정의서 작성&lt;/td&gt;
&lt;td style=&quot;width: 74.0698%;&quot;&gt;&lt;b&gt;요구사항 명세&lt;/b&gt;, &lt;b&gt;기획 단계&lt;/b&gt;, &lt;b&gt;Feature Spec&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%;&quot;&gt;화면 흐름 및 와이어프레임&lt;/td&gt;
&lt;td style=&quot;width: 74.0698%;&quot;&gt;&lt;b&gt;UX 설계&lt;/b&gt;, &lt;b&gt;UI 기획&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%;&quot;&gt;개발&lt;/td&gt;
&lt;td style=&quot;width: 74.0698%;&quot;&gt;&lt;b&gt;구현&lt;/b&gt;, &lt;b&gt;코딩&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%;&quot;&gt;테스트&lt;/td&gt;
&lt;td style=&quot;width: 74.0698%;&quot;&gt;&lt;b&gt;QA&lt;/b&gt;, &lt;b&gt;검증&lt;/b&gt;, &lt;b&gt;디버깅&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%;&quot;&gt;배포&lt;/td&gt;
&lt;td style=&quot;width: 74.0698%;&quot;&gt;&lt;b&gt;릴리즈&lt;/b&gt;, &lt;b&gt;런칭&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.814%;&quot;&gt;전체 흐름&lt;/td&gt;
&lt;td style=&quot;width: 74.0698%;&quot;&gt;&lt;b&gt;SDLC&lt;/b&gt;, &lt;b&gt;개발 프로세스&lt;/b&gt;, &lt;b&gt;개발 생애주기&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;과정&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;b&gt;요구사항 수집 (Requirements Gathering)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;주요 주체&lt;/b&gt;: 기획자, PO(Product Owner), 이해관계자&lt;/li&gt;
&lt;li&gt;&lt;b&gt;활동&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시장/사용자 조사&lt;/li&gt;
&lt;li&gt;인터뷰, 설문, 벤치마킹&lt;/li&gt;
&lt;li&gt;기존 서비스 문제점 분석&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;산출물&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;요구사항 명세서&lt;/li&gt;
&lt;li&gt;고객 여정 지도 (Customer Journey Map)&lt;/li&gt;
&lt;li&gt;사용자 페르소나&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;b&gt;기능 정의서 작성 (Feature Specification)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;주요 주체&lt;/b&gt;: 기획자, PM&lt;/li&gt;
&lt;li&gt;&lt;b&gt;활동&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;핵심 기능 도출&lt;/li&gt;
&lt;li&gt;각 기능에 대한 정의 및 목적 명시&lt;/li&gt;
&lt;li&gt;사용자 플로우 설계&lt;/li&gt;
&lt;li&gt;화면 흐름도 작성 (Flow Chart, Wireframe)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;산출물&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능 정의서 (기능명, 목적, 조건, 예외 등)&lt;/li&gt;
&lt;li&gt;화면 흐름도 및 기능 명세서&lt;/li&gt;
&lt;li&gt;비즈니스 룰 목록&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;UI/UX 설계 (Wireframe &amp;rarr; Mockup &amp;rarr; Prototype)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;주요 주체&lt;/b&gt;: 디자이너, 기획자&lt;/li&gt;
&lt;li&gt;&lt;b&gt;활동&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;와이어프레임 제작&lt;/li&gt;
&lt;li&gt;피그마(Figma), Adobe XD 등을 이용한 프로토타입 제작&lt;/li&gt;
&lt;li&gt;UX 테스트 (선택사항)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;산출물&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;와이어프레임&lt;/li&gt;
&lt;li&gt;디자인 시안&lt;/li&gt;
&lt;li&gt;인터랙션 가이드&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;기술 설계 (Technical Design)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;주요 주체&lt;/b&gt;: 개발자, 아키텍트, DBA&lt;/li&gt;
&lt;li&gt;&lt;b&gt;활동&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시스템 아키텍처 설계 (MVP 구조, DB 구조)&lt;/li&gt;
&lt;li&gt;API 명세 정의 (Swagger, Notion 등 활용)&lt;/li&gt;
&lt;li&gt;기술 스택 결정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;산출물&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DB 모델링 문서&lt;/li&gt;
&lt;li&gt;ERD&lt;/li&gt;
&lt;li&gt;API 명세서&lt;/li&gt;
&lt;li&gt;시스템 구성도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. &lt;b&gt;개발 (Development)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;주요 주체&lt;/b&gt;: 프론트엔드 / 백엔드 개발자&lt;/li&gt;
&lt;li&gt;&lt;b&gt;활동&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Git 브랜치 전략에 따라 협업&lt;/li&gt;
&lt;li&gt;단위 기능별 개발 진행&lt;/li&gt;
&lt;li&gt;코드 리뷰 및 리팩토링&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;산출물&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발된 소스 코드&lt;/li&gt;
&lt;li&gt;테스트 코드&lt;/li&gt;
&lt;li&gt;내부 문서화 (README, 위키 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-size: 1.44em; letter-spacing: -1px;&quot;&gt;6. &lt;/span&gt;&lt;b&gt;테스트 (Testing)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;목표&lt;/b&gt;: 오류 및 버그 검출&lt;/li&gt;
&lt;li&gt;&lt;b&gt;활동&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단위 테스트(Unit Test)&lt;/li&gt;
&lt;li&gt;통합 테스트(Integration Test)&lt;/li&gt;
&lt;li&gt;사용자 테스트 (QA)&lt;/li&gt;
&lt;li&gt;버그 수정 및 기능 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. &lt;b&gt;배포 (Deployment)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;목표&lt;/b&gt;: 실제 서비스 오픈&lt;/li&gt;
&lt;li&gt;&lt;b&gt;활동&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빌드 및 배포 (CI/CD 활용 가능)&lt;/li&gt;
&lt;li&gt;클라우드 서버 설정 (AWS, GCP 등)&lt;/li&gt;
&lt;li&gt;DB 마이그레이션&lt;/li&gt;
&lt;li&gt;초기 데이터 세팅&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8. &lt;b&gt;운영 및 유지보수 (Operation &amp;amp; Maintenance)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;목표&lt;/b&gt;: 서비스 안정적 운영&lt;/li&gt;
&lt;li&gt;&lt;b&gt;활동&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모니터링 및 로그 분석&lt;/li&gt;
&lt;li&gt;버그 수정 및 기능 추가&lt;/li&gt;
&lt;li&gt;고객 피드백 반영&lt;/li&gt;
&lt;li&gt;정기 백업 및 보안 업데이트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;애자일 방법론&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;b&gt;제품 백로그 작성 (Product Backlog)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;*PO(Product Owner)**가 작성&lt;/li&gt;
&lt;li&gt;해야 할 모든 기능, 개선 사항, 버그 등 기록&lt;/li&gt;
&lt;li&gt;우선순위 기준: 사용자 가치, 사업성, 위험도 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그인 기능&lt;/li&gt;
&lt;li&gt;상품 상세 페이지&lt;/li&gt;
&lt;li&gt;결제 실패 알림 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;b&gt;스프린트 계획 회의 (Sprint Planning)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;기간&lt;/b&gt;: 보통 1~2주&lt;/li&gt;
&lt;li&gt;PO + 개발팀 + 디자이너 등 전원 참여&lt;/li&gt;
&lt;li&gt;이번 스프린트에 &lt;b&gt;무엇을 할지 선택&lt;/b&gt;하고 &lt;b&gt;목표 설정&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력물:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스프린트 백로그 (이번 주에 할 일 목록)&lt;/li&gt;
&lt;li&gt;스프린트 목표&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;스프린트 실행 (Sprint Execution)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정해진 기간 동안 백로그에 있는 작업 수행&lt;/li&gt;
&lt;li&gt;기능 개발, 디자인, 테스트 등 전부 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀은 &lt;b&gt;협업 중심&lt;/b&gt;으로 일하고, 수시로 작업 조율 가능!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;데일리 스크럼 (Daily Stand-up)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매일 15분 이내 짧은 회의&lt;/li&gt;
&lt;li&gt;각자 말하는 3가지:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;어제 한 일&lt;/li&gt;
&lt;li&gt;오늘 할 일&lt;/li&gt;
&lt;li&gt;막힌 점 (Blocker)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빠르게 공유하고 문제 있으면 바로 해결!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. &lt;b&gt;스프린트 리뷰 (Sprint Review)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스프린트 끝날 때 &lt;b&gt;완성된 결과물 시연&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;PO, 팀원, 이해관계자 참여&lt;/li&gt;
&lt;li&gt;피드백 받고 &lt;b&gt;제품 백로그 업데이트&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목적: &quot;우리가 만든 게 사용자/비즈니스 목표에 부합하는가?&quot;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. &lt;b&gt;스프린트 회고 (Sprint Retrospective)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내부 팀원끼리만 진행&lt;/li&gt;
&lt;li&gt;잘한 점, 아쉬운 점, 다음 스프린트에 개선할 점 논의&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;잘한 점: 커뮤니케이션 활발했음&lt;/li&gt;
&lt;li&gt;아쉬운 점: QA 시간 부족&lt;/li&gt;
&lt;li&gt;개선할 점: QA를 중간에 한 번 더 넣자&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;부가 개념 정리&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.4651%;&quot;&gt;&lt;b&gt;MVP&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.4186%;&quot;&gt;최소 기능 제품, 빠르게 검증&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.4651%;&quot;&gt;&lt;b&gt;User Story&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.4186%;&quot;&gt;사용자의 관점에서 작성된 기능 설명 (&quot;나는 ~할 수 있다&quot;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.4651%;&quot;&gt;&lt;b&gt;Velocity&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.4186%;&quot;&gt;한 스프린트 동안 처리 가능한 작업량&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.4651%;&quot;&gt;&lt;b&gt;Definition of Done&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.4186%;&quot;&gt;완료로 인정되는 기준 (예: 코드 + 테스트 + 리뷰 통과 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;애자일 방식일 경우 반복적 실행&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;스프린트 단위로 기획 &amp;rarr; 개발 &amp;rarr; 테스트 &amp;rarr; 회고 반복&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;매 1~2주마다 배포 가능&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Ai</category>
      <category>MVP</category>
      <category>PM</category>
      <category>개발방법론</category>
      <category>설계</category>
      <category>소프트웨어 설계</category>
      <category>애자일</category>
      <category>정보처리기사</category>
      <category>풀스택개발</category>
      <category>프로젝트 관리</category>
      <author>시바도지</author>
      <guid isPermaLink="true">https://zerostarting.tistory.com/79</guid>
      <comments>https://zerostarting.tistory.com/79#entry79comment</comments>
      <pubDate>Sat, 24 Jan 2026 13:12:19 +0900</pubDate>
    </item>
    <item>
      <title>챗(chat)GPT 지브리 스타일 이미지 만드는 방법</title>
      <link>https://zerostarting.tistory.com/78</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오픈 AI에서 현지시간 25일, chatGPT-4o 이미지 생성 기능을 업데이트 했다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;843&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d6SA0X/btsM5vdS4Av/PchslOhjLptMfUMS2k7zqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d6SA0X/btsM5vdS4Av/PchslOhjLptMfUMS2k7zqK/img.png&quot; data-alt=&quot;모범사례&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d6SA0X/btsM5vdS4Av/PchslOhjLptMfUMS2k7zqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd6SA0X%2FbtsM5vdS4Av%2FPchslOhjLptMfUMS2k7zqK%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;500&quot; height=&quot;843&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;843&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;모범사례&lt;/figcaption&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;p data-ke-size=&quot;size16&quot;&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;예를 들어서 &quot;이미지를 지브리 스타일로 그려줘.&quot; 이렇게 입력하면 알아서 잘 해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSR1QC/btsM0o1oMQ4/3XXclHNkFA0VbNnFKMtxOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSR1QC/btsM0o1oMQ4/3XXclHNkFA0VbNnFKMtxOk/img.png&quot; data-alt=&quot;챗gpt 프롬프트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSR1QC/btsM0o1oMQ4/3XXclHNkFA0VbNnFKMtxOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSR1QC%2FbtsM0o1oMQ4%2F3XXclHNkFA0VbNnFKMtxOk%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;978&quot; height=&quot;414&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;챗gpt 프롬프트&lt;/figcaption&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;&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;요즘 SNS에서 사진을 지브리 스타일로 수정해서 게시하는 것이 유행인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나도 직접 해보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XcCgK/btsM0p0fXfi/aeTxQYgljkUxHvcC7wsGw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XcCgK/btsM0p0fXfi/aeTxQYgljkUxHvcC7wsGw1/img.png&quot; data-alt=&quot;원하는 이미지와 프롬프트를 입력해준다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XcCgK/btsM0p0fXfi/aeTxQYgljkUxHvcC7wsGw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXcCgK%2FbtsM0p0fXfi%2FaeTxQYgljkUxHvcC7wsGw1%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;367&quot; height=&quot;257&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;원하는 이미지와 프롬프트를 입력해준다.&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_1.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7BZOh/btsM2L8xTxb/kWBa6ylcwqumV2OSJVwiK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7BZOh/btsM2L8xTxb/kWBa6ylcwqumV2OSJVwiK0/img.png&quot; data-alt=&quot;결과물&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7BZOh/btsM2L8xTxb/kWBa6ylcwqumV2OSJVwiK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7BZOh%2FbtsM2L8xTxb%2FkWBa6ylcwqumV2OSJVwiK0%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;300&quot; height=&quot;450&quot; data-filename=&quot;edited_1.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과물&lt;/figcaption&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;레트로 하면서 그리운 느낌이 많이 드는 그림체다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;331&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/97SL2/btsM1qYD2OK/gE0sGaN3vNxrxva4LcuKdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/97SL2/btsM1qYD2OK/gE0sGaN3vNxrxva4LcuKdk/img.png&quot; data-alt=&quot;해줘.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/97SL2/btsM1qYD2OK/gE0sGaN3vNxrxva4LcuKdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F97SL2%2FbtsM1qYD2OK%2FgE0sGaN3vNxrxva4LcuKdk%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;331&quot; height=&quot;82&quot; data-origin-width=&quot;331&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해줘.&lt;/figcaption&gt;
&lt;/figure&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfqYDJ/btsM1aVQdYL/r76GCxqjTLPgirJIeeDoMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfqYDJ/btsM1aVQdYL/r76GCxqjTLPgirJIeeDoMK/img.png&quot; data-alt=&quot;4컷 만화 결과물&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfqYDJ/btsM1aVQdYL/r76GCxqjTLPgirJIeeDoMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfqYDJ%2FbtsM1aVQdYL%2Fr76GCxqjTLPgirJIeeDoMK%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;300&quot; height=&quot;450&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;4컷 만화 결과물&lt;/figcaption&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 챗gpt의 새로운 기능을 살펴보았다.&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;</description>
      <category>일상</category>
      <category>Ai</category>
      <category>meme</category>
      <category>만화</category>
      <category>애니</category>
      <category>이미지생성</category>
      <category>인공지능</category>
      <category>지브리풍</category>
      <category>챗지피티</category>
      <category>특이점</category>
      <category>파이썬</category>
      <author>시바도지</author>
      <guid isPermaLink="true">https://zerostarting.tistory.com/78</guid>
      <comments>https://zerostarting.tistory.com/78#entry78comment</comments>
      <pubDate>Sat, 29 Mar 2025 22:43:07 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL Time zone 변경하는 방법</title>
      <link>https://zerostarting.tistory.com/77</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;현재 DB의 Time zone을 확인한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741994346037&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SHOW timezone;&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;Time zone 변경&lt;/p&gt;
&lt;pre id=&quot;code_1741994481345&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 한국 시간
ALTER DATABASE &amp;lt;DB_NAME&amp;gt; SET timezone = 'Asia/Seoul';

# UTC
ALTER DATABASE &amp;lt;DB_NAME&amp;gt; SET TIME ZONE 'UTC';&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;수정이 완료 되었으면 PostgreSQL을 재시작한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741994542000&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart postgresql.service&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DB/PostgreSQL</category>
      <category>AWS</category>
      <category>ec2</category>
      <category>linux</category>
      <category>Python</category>
      <category>데이터베이스</category>
      <category>리눅스</category>
      <category>빅데이터</category>
      <category>우분투</category>
      <category>자바</category>
      <category>파이썬</category>
      <author>시바도지</author>
      <guid isPermaLink="true">https://zerostarting.tistory.com/77</guid>
      <comments>https://zerostarting.tistory.com/77#entry77comment</comments>
      <pubDate>Sat, 15 Mar 2025 08:23:07 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL Dump 파일로 DB 복구하는 방법</title>
      <link>https://zerostarting.tistory.com/76</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;만약 DB의 모든 데이터가 날아갔거나 복구해야할 일이 있다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 절차를 그대로 실행하면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;준비물: dump 파일(.sql)&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;1. 먼저 psql에 접속한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741864626555&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo -u postgres psql&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;2. (필요 시)모든 세션을 (강제)종료 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741864687385&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = &amp;lt;DB명&amp;gt;;
# 예시: SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'example_db'&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. DB를 삭제 후 재생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741864742526&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP DATABASE &amp;lt;DB명&amp;gt;;
CREATE DATABASE &amp;lt;DB명&amp;gt;;

# 예시: DROP DATABASE example_db;
# 예시: CREATE DATABASE example_db;&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;4. psql에서 나간다.&lt;/p&gt;
&lt;pre id=&quot;code_1741864810186&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;\q&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;5. 복구 실행&lt;/p&gt;
&lt;pre id=&quot;code_1741864851417&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;psql -U &amp;lt;psql ID&amp;gt; -d &amp;lt;DB명&amp;gt; -f &amp;lt;복구할 파일.sql&amp;gt;

# 예시: psql -U postgres -d example_db -f dump_example_db.sql&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DB/PostgreSQL</category>
      <category>AWS</category>
      <category>ec2</category>
      <category>linux</category>
      <category>MySQL</category>
      <category>Python</category>
      <category>SQL</category>
      <category>리눅스</category>
      <category>우분투</category>
      <category>자바</category>
      <category>파이썬</category>
      <author>시바도지</author>
      <guid isPermaLink="true">https://zerostarting.tistory.com/76</guid>
      <comments>https://zerostarting.tistory.com/76#entry76comment</comments>
      <pubDate>Thu, 13 Mar 2025 21:46:23 +0900</pubDate>
    </item>
    <item>
      <title>EC2에 있는 PostgreSQL DB Dump 파일을 내 PC로 복사</title>
      <link>https://zerostarting.tistory.com/75</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;사전에 EC2에 PostgresSQL이 설치되어 있고, 스키마가 구성되어있을 때, 해당 스키마 전체를 dump 파일로 만든 후 내 PC로 복사를 하고 싶다.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 먼저 EC2에 SSH로 접근한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741863578277&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# pem 키가 있는 디렉토리로 이동 후 ec2 접속 명령어 입력
ssh -i &quot;&amp;lt;pem 키&amp;gt;&quot; &amp;lt;ec2 user 명&amp;gt;@&amp;lt;ec2 ip&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;2. Postgres 사용자로 전환하여 dump 파일을 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741863622275&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo -i -u &amp;lt;postgres 아이디&amp;gt;
# 예: sudo -i -u postgres&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. dump 파일을 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741863647034&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pg_dump -U &amp;lt;db_user_name&amp;gt; -F p -d &amp;le;db_name&amp;ge; -f &amp;lt;파일명.sql&amp;gt;
# 예: pg_dump -U postgres -F p -d example_db -f example_dump.sql&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;4. dump 파일 생성이 완료 되었으면 생성된 파일의 경로를 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그후 다시 EC2 사용자로 전환한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741863732165&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pwd
# /var/lib/pgsql
exit&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;5. cp 명령어를 사용하여 해당 dump 파일을 복사한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 권한 문제가 있다면 명령어 앞에 sudo를 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741863795888&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cp &amp;lt;dump 파일 경로&amp;gt; &amp;lt;복사할 경로&amp;gt;
# 예: [sudo] cp /var/lib/pgsql/example_dump.sql /home/ec2-user&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;6. dump 파일 복사가 완료 되었다면 scp 명령어를 사용하여 내 PC로 dump 파일을 복사한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 내 PC 콘솔로 되돌아가서 해당 EC2의 pem 키가 있는 디렉토리에서 다음의 명령어를 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 권한 문제가 있다면 명령어 앞에 sudo를 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741863988965&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[sudo] scp -i &amp;lt;pem키.pem&amp;gt; &amp;lt;ec2 주소&amp;gt;:&amp;lt;dump 파일 경로&amp;gt; &amp;lt;복사할 경로&amp;gt;
# 예: scp -i myPemKey.pem ec2-user@ec2-12-123-123.123.ap-northeast-2.compute.amazonaws.com/:home/ec2-user/example_dump.sql&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DB/PostgreSQL</category>
      <category>AWS</category>
      <category>cp</category>
      <category>MySQL</category>
      <category>pgAdmin</category>
      <category>psql</category>
      <category>scp</category>
      <category>SQL</category>
      <category>리눅스</category>
      <category>백업</category>
      <category>우분투</category>
      <author>시바도지</author>
      <guid isPermaLink="true">https://zerostarting.tistory.com/75</guid>
      <comments>https://zerostarting.tistory.com/75#entry75comment</comments>
      <pubDate>Thu, 13 Mar 2025 20:13:19 +0900</pubDate>
    </item>
    <item>
      <title>Nginx upstream timed out (110: Connection timed out) 오류 해결 방법</title>
      <link>https://zerostarting.tistory.com/74</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;nginx가 API 서버의 앞단에서 리버스 프록시 역할을 하고 있을 때, API 서버로 파일을 다운로드 받을 때 다음과 같은 오류가 발생하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1741163955118&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[warn] a client request body is buffered to a temporary file /var/lib/nginx/tmp/client_body/0000000567, ...
[error] upstream timed out (110: Connection timed out) while reading response header from upstream, ...&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;우선 [warn] 로그는 클라이언트에서 요청을 보낼 때, 요청 body가 크기 제한을 초과해서 Nginx가 이를 임시 파일(/var/lib/nginx/tmp/client_body)에 저장했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 요청 body 크기가 client_body_buffer_size보다 클 경우에 발생한다.&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;그 이후에 [error] 로그는 Nginx가 백엔드 서버로 요청을 전달했으나 응답을 받지 못하고 타임아웃이 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;upstream timed out 오류는 백엔드 서비스가 과부하 상태 또는 실행되지 않거나 네트워크 지연이 원인이 될 수 있다.&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;나의 문제는 프록시를 통해서 파일을 다운로드 받으려고 할 때, read 타임아웃이 발생되어 연결이 종료 되면서 발생한 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결 방법은 간단하다.&lt;/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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 다음의 위치로 이동&lt;/p&gt;
&lt;pre id=&quot;code_1741164778871&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /etc/nginx/conf.d&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;2. 해당 서버의 conf 파일을 수정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741164863464&quot; class=&quot;css&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vi [server name].conf&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;- client_body_buffer_size 값을 늘려서 임시 파일 저장을 최소화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- client_max_body_size를 적절히 설정하여 큰 요청은 차단하도록 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741164595000&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
    client_body_buffer_size 16k;  # 기본값보다 크게 설정 (기본: 8k/16k)
    client_max_body_size 10M;     # 최대 요청 바디 크기 제한 증가 (10M)
}&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;4. 수정 후 설정 파일 문법 체크&lt;/p&gt;
&lt;pre id=&quot;code_1741165250128&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nginx -t

# 정상이라면 다음과 같이 출력
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful&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;5. 설정 적용&lt;/p&gt;
&lt;pre id=&quot;code_1741165458503&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 설정만 리로드
systemctl reload nginx

# nginx 완전히 재시작
# 주의: 완전히 재시작 하면 현재 처리 중인 요청이 중단할 수도 있다.
systemctl restart nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Upstream 타임아웃 시간을 증가 해줘야 한다면&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 다음의 위치로 이동&lt;/p&gt;
&lt;pre id=&quot;code_1741164408951&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /etc/nginx/conf.d&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;2. 해당 서버의 conf 파일을 수정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741164426225&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi [server name].conf&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;pre id=&quot;code_1741164443619&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;location {
    # Set proxy timeout
    proxy_send_timeout 60s;      # proxy를 통해서 데이터를 전달할 때 타임아웃
    proxy_read_timeout 60s;      # proxy를 통해서 데이터를 읽을 때 타임아웃
    proxy_connect_timeout 60s;   # proxy를 통해서 연결을 요청할 때 타임아웃
}&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;4. 수정 후 설정 파일 문법 체크&lt;/p&gt;
&lt;pre id=&quot;code_1741165474713&quot; class=&quot;vim&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;nginx -t

# 정상이라면 다음과 같이 출력
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful&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;5. 설정 적용&lt;/p&gt;
&lt;pre id=&quot;code_1741165482350&quot; class=&quot;vala&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 설정만 리로드
systemctl reload nginx

# nginx 완전히 재시작
# 주의: 완전히 재시작 하면 현재 처리 중인 요청이 중단할 수도 있다.
systemctl restart nginx&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;그 외에 백엔드 서버 문제라면?&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. curl을 사용하여 해당 서버가 정상적으로 작동하는지 확인한다.&lt;/p&gt;
&lt;pre id=&quot;code_1741165028311&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -v &quot;http://127.0.0.1:&amp;lt;포트번호&amp;gt;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux/오류 및 해결 방법</category>
      <category>AWS</category>
      <category>devops</category>
      <category>java</category>
      <category>NGINX</category>
      <category>데브옵스</category>
      <category>리눅스</category>
      <category>엔진x</category>
      <category>엔진엑스</category>
      <category>우분투</category>
      <category>자바</category>
      <author>시바도지</author>
      <guid isPermaLink="true">https://zerostarting.tistory.com/74</guid>
      <comments>https://zerostarting.tistory.com/74#entry74comment</comments>
      <pubDate>Wed, 5 Mar 2025 18:08:46 +0900</pubDate>
    </item>
    <item>
      <title>Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences</title>
      <link>https://zerostarting.tistory.com/71</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL에서 DELETE 또는 UPDATE 쿼리 시 발생할 수 있는 오류다.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 오류는 MySQL의 safe update 모드로 인해 발생할 수 있는 것으로, UPDATE나 DELETE 쿼리에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WHERE 절에서 기본 키 열을 사용하지 않는 경우, UPDATE, DELETE 명령을 수행하지 못하게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 실수로 모든 행을 업데이트 해버리거나 삭제하는 것을 방지하기 위해 설정을 걸어둔 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;방법1. 기본키를 사용한 WHERE 절을 추가한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 간단한 방법이다. SQL문에 WHERE 절을 추가하면 safe update 모드를 무시하고 쿼리를 수행할 수 있다.&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;pre id=&quot;code_1699339287650&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 오류가 발생할 수 있는 쿼리
UPDATE my_table
SET column_name = new_value&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1699339248527&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- WHERE 절을 추가
UPDATE my_table
SET column_name = new_value
WHERE primary_key_column = my_value;&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;&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;size18&quot;&gt;&lt;b&gt;방법2. safe update 모드를 비활성화 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;safe update를 비활성화 하면 사용자가 만약 실수를 한다면 테이블 전체에 영향을 줄 수 있으니 조심하도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1699339414983&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 비활성화
SET SQL_SAFE_UPDATES = 0;

-- 활성화
SET SQL_SAFE_UPDATES = 1;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DB/MySQL</category>
      <category>1175</category>
      <category>Delete</category>
      <category>MySQL</category>
      <category>safe update</category>
      <category>Update</category>
      <category>Where</category>
      <category>오류</category>
      <author>시바도지</author>
      <guid isPermaLink="true">https://zerostarting.tistory.com/71</guid>
      <comments>https://zerostarting.tistory.com/71#entry71comment</comments>
      <pubDate>Tue, 7 Nov 2023 15:46:45 +0900</pubDate>
    </item>
    <item>
      <title>mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported</title>
      <link>https://zerostarting.tistory.com/70</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;원인&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'caching_sha2_password' 인증 플러그인 오류는 MySQL 8.0 버전 이후의 MySQL 서버에서 발생할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 MySQL 서버의 기본 인증 플러그인이 'caching_sha2_password'으로 변경되면서 발생한다.&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;h3 data-ke-size=&quot;size23&quot;&gt;해결 방법&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;방법1. 사용자 계정 변경하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 방식의 인증 플러그인을 지원하는 사용자 계정을 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1699337197851&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER USER 'yourusername'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'yourpassword';&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;&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;size18&quot;&gt;&lt;b&gt;방법2. MySQL 설정 변경하기&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 설정 파일에서 `default_authentication_plugin` 값을 변경한 후, MySQL 서버를 종료 후, 다시 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. MySQL 설정 파일 찾기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 설정 파일은 OS 마다 이름이 다르다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Mac, Linux : &lt;b&gt;my.cnf&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;/etc/my.cnf&lt;/li&gt;
&lt;li&gt;/etc/mysql/my.cnf&lt;/li&gt;
&lt;li&gt;/usr/local/mysql/etc/my.cnf&lt;/li&gt;
&lt;li&gt;~/.my.cnf&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Windows: &lt;b&gt;my.ini&lt;/b&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;C:\ProgramData\MySQL\MySQL&amp;nbsp;Server&amp;nbsp;8.0&lt;/li&gt;
&lt;li&gt;윈도우10: [찾기] -&amp;gt; [서비스] -&amp;gt; [MySQLxx] -&amp;gt; [실행 파일 경로]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1067&quot; data-origin-height=&quot;579&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7I0Eo/btszUprj8aq/DzL6xkzj2WcPdKJKGrpsVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7I0Eo/btszUprj8aq/DzL6xkzj2WcPdKJKGrpsVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7I0Eo/btszUprj8aq/DzL6xkzj2WcPdKJKGrpsVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7I0Eo%2FbtszUprj8aq%2FDzL6xkzj2WcPdKJKGrpsVK%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;696&quot; height=&quot;378&quot; data-origin-width=&quot;1067&quot; data-origin-height=&quot;579&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. my.cnf 또는 my.ini 파일 수정하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699337340782&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[mysqld]
default_authentication_plugin=mysql_native_password&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. MySQL 다시 시작&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;리눅스&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699338416122&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;service mysql restart&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;b&gt;윈도우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[서비스] -&amp;gt; [MySQL xx] -&amp;gt; [다시 시작(E)]&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1073&quot; data-origin-height=&quot;575&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcotzh/btszXJhZtLF/kZqAlNu2KfvQMcYjSeop50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcotzh/btszXJhZtLF/kZqAlNu2KfvQMcYjSeop50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcotzh/btszXJhZtLF/kZqAlNu2KfvQMcYjSeop50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcotzh%2FbtszXJhZtLF%2FkZqAlNu2KfvQMcYjSeop50%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;713&quot; height=&quot;382&quot; data-origin-width=&quot;1073&quot; data-origin-height=&quot;575&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;&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;</description>
      <category>DB/MySQL</category>
      <category>Authentication plugin</category>
      <category>caching_sha2_password</category>
      <category>MySQL</category>
      <category>MySQL 8.0</category>
      <category>오류</category>
      <category>인증 플러그인</category>
      <author>시바도지</author>
      <guid isPermaLink="true">https://zerostarting.tistory.com/70</guid>
      <comments>https://zerostarting.tistory.com/70#entry70comment</comments>
      <pubDate>Tue, 7 Nov 2023 15:30:31 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 매크로, 자동화 스크립트 작성법 (pyautogui)</title>
      <link>https://zerostarting.tistory.com/69</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;파이썬에서 매크로를 작성하려면 `pyautogui` 모듈을 사용하면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pyautogui는 GUI 기반 작업을 자동화하는데 도움을 주는 라이브러리다.&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;h3 data-ke-size=&quot;size23&quot;&gt;설치&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;pre id=&quot;code_1699335739628&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install pyautogui&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마우스 매크로&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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_1699335978212&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pyautogui

x, y = pyautogui.position()
print(x, y) # x좌표, y좌표

pos = pyautogui.position()
print(pos) # Point(x=[x 좌표], y=[y 좌표])&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_1699336018076&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pyautogui.moveTo(0,0) # 0,0 좌표로 이동&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_1699336096204&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pyautogui.moveRel(1,0) # x 방향으로 1픽셀만큼 움직임&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_1699336133588&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pyautogui.click(x=100,y=100) # 100,100 좌표 클릭

pyautogui.rightClick()  # 우클릭
pyautogui.leftClick()   # 좌클릭

pyautogui.doubleClick() # 더블클릭&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_1699336289614&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 현재 커서 위치에서 100, 100 좌표 까지 2초간 드래그
# duration 값이 없다면, 드래그가 잘 안되는 경우가 있으니 설정하기
pyautogui.dragTo(x=100, y=100, duration=2)&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;키보드 매크로&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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_1699336370193&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# interval은 천천히 글자를 입력할 때 사용
pyautogui.typewrite(&quot;Hello&quot;, interval=1)&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;Enter 키 입력&lt;/p&gt;
&lt;pre id=&quot;code_1699336472247&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pyautogui.press('enter')&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_1699336545394&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pyautogui.keyDown('shift') # shift 누른 상태 유지
pyautogui.keyUp('shift') # 누르고 있는 shift 떼기&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;Ctrl + c&lt;/p&gt;
&lt;pre id=&quot;code_1699336569583&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pyautogui.hotkey('ctrl', 'c')&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://pyautogui.readthedocs.io/en/latest/keyboard.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://pyautogui.readthedocs.io/en/latest/keyboard.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1699336604466&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;Keyboard Control Functions &amp;mdash; PyAutoGUI  documentation&quot; data-og-description=&quot;The write() Function The primary keyboard function is write(). This function will type the characters in the string that is passed. To add a delay interval in between pressing each character key, pass an int or float for the interval keyword argument. For &quot; data-og-host=&quot;pyautogui.readthedocs.io&quot; data-og-source-url=&quot;https://pyautogui.readthedocs.io/en/latest/keyboard.html&quot; data-og-url=&quot;https://pyautogui.readthedocs.io/en/latest/keyboard.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://pyautogui.readthedocs.io/en/latest/keyboard.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://pyautogui.readthedocs.io/en/latest/keyboard.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Keyboard Control Functions &amp;mdash; PyAutoGUI documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The write() Function The primary keyboard function is write(). This function will type the characters in the string that is passed. To add a delay interval in between pressing each character key, pass an int or float for the interval keyword argument. For&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pyautogui.readthedocs.io&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>Programming/Python</category>
      <category>GUI</category>
      <category>pyautogui</category>
      <category>python auto</category>
      <category>매크로</category>
      <category>사무자동화</category>
      <category>자동화</category>
      <category>파이썬</category>
      <category>파이썬매크로</category>
      <author>시바도지</author>
      <guid isPermaLink="true">https://zerostarting.tistory.com/69</guid>
      <comments>https://zerostarting.tistory.com/69#entry69comment</comments>
      <pubDate>Tue, 7 Nov 2023 14:58:15 +0900</pubDate>
    </item>
    <item>
      <title>MySQL Auto increment 초기화</title>
      <link>https://zerostarting.tistory.com/68</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;Auto increment 초기화를 한다면 데이터 무결성과 성능에 영향이 갈 수 있으니 주의 할 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1699334669957&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE [테이블 명] auto_increment = 1;&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>DB/MySQL</category>
      <author>시바도지</author>
      <guid isPermaLink="true">https://zerostarting.tistory.com/68</guid>
      <comments>https://zerostarting.tistory.com/68#entry68comment</comments>
      <pubDate>Tue, 7 Nov 2023 14:27:08 +0900</pubDate>
    </item>
  </channel>
</rss>