<?xml version="1.0" encoding="UTF-8" ?>
    <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
      <channel>
        <title>Taeyoung Kim - KO</title>
        <link>https://www.taeyoungkim.dev/ko</link>
        <atom:link href="https://www.taeyoungkim.dev/ko/rss.xml" rel="self" type="application/rss+xml" />
        <description>클라우드 네이티브 백엔드, 엔터프라이즈 플랫폼, AI/LLM 워크플로우에 관한 엔지니어링 기록입니다.</description>
        <language>ko</language>
        <lastBuildDate>Sun, 27 Sep 2026 08:10:54 GMT</lastBuildDate>
        
        <item>
          <title>Zustand와 React 지역 상태 차이: 장바구니 수량과 패널 열림은 어디에 둘까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/zustand-store-vs-local-state-panel-cart</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/zustand-store-vs-local-state-panel-cart</guid>
          <description>여러 컴포넌트가 함께 쓰는 값과 한 화면에서만 필요한 값을 구분해 Zustand 스토어와 useState를 선택하는 기준을 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>리눅스 systemctl start와 enable 차이: 지금 실행과 재부팅 후 자동 시작</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-systemctl-start-enable-difference</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-systemctl-start-enable-difference</guid>
          <description>systemd 서비스가 지금은 동작하지만 재부팅 뒤 멈추는 이유를 start·enable·status의 역할과 안전한 점검 순서로 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>React 입력창에 글자가 안 써질 때: value와 onChange 제어 입력 확인</title>
          <link>https://www.taeyoungkim.dev/ko/blog/react-controlled-input-value-onchange-reset</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/react-controlled-input-value-onchange-reset</guid>
          <description>React input에 value만 설정하면 입력이 되돌아가는 이유를 상태 업데이트 예제와 입력·초기화 테스트 순서로 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>리눅스 stdout과 stderr 차이: 정상 결과와 오류를 따로 저장하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-stdout-stderr-redirection-separate</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-stdout-stderr-redirection-separate</guid>
          <description>명령 결과에 오류가 섞이거나 파일로 저장되지 않을 때 표준 출력 1과 표준 오류 2의 차이와 리다이렉션 확인 방법을 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>React Router 중첩 경로가 빈 화면일 때: children과 Outlet 확인</title>
          <link>https://www.taeyoungkim.dev/ko/blog/react-router-nested-route-outlet-missing-child</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/react-router-nested-route-outlet-missing-child</guid>
          <description>부모 레이아웃은 보이는데 자식 페이지가 렌더링되지 않을 때 중첩 경로와 Outlet 위치를 확인하는 방법을 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>SSH 공개키 접속 Permission denied: authorized_keys와 파일 권한 확인</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-ssh-authorized-keys-permission-check</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-ssh-authorized-keys-permission-check</guid>
          <description>키를 등록했는데 SSH 공개키 인증이 거부될 때 사용자·공개키 등록 위치·권한을 안전하게 확인하는 순서를 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Python try·except·else·finally 실행 순서: 성공과 오류 때 무엇이 실행될까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-try-except-else-finally-flow</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-try-except-else-finally-flow</guid>
          <description>파일이나 숫자 처리 중 예외가 날 때 try, except, else, finally가 각각 언제 실행되는지 최소 예제와 오류 점검 순서로 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Terraform과 Ansible 차이: 서버 생성과 내부 설정을 어디서 나눌까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/terraform-ansible-provision-config-boundary</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/terraform-ansible-provision-config-boundary</guid>
          <description>클라우드 서버를 만들고 웹 서버를 설정하는 예로 Terraform의 인프라 상태와 Ansible의 구성 작업을 구분하고 검증 순서를 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>JavaScript 길게 누르기 버튼: 손을 떼면 타이머를 취소하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/javascript-press-hold-cleartimeout-pointercancel</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/javascript-press-hold-cleartimeout-pointercancel</guid>
          <description>setTimeout으로 길게 누르기를 만들 때 짧게 누르거나 포인터가 취소돼도 작업이 실행되는 문제를 clearTimeout과 상태 점검으로 해결합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>journalctl -u와 -b 차이: 이번 부팅의 서비스 오류만 보는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-journalctl-unit-current-boot-logs</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-journalctl-unit-current-boot-logs</guid>
          <description>systemd 서비스가 재부팅 뒤 실패했을 때 journalctl의 서비스 필터와 부팅 필터를 조합해 로그 범위를 좁히는 순서를 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>pandas read_csv 한글 UnicodeDecodeError: UTF-8과 CP949 확인법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/pandas-read-csv-cp949-utf8-error</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/pandas-read-csv-cp949-utf8-error</guid>
          <description>한글 CSV를 read_csv로 읽다가 UnicodeDecodeError가 날 때 파일의 바이트 인코딩을 확인하고 encoding=&quot;cp949&quot;를 선택하는 기준을 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Dart String?와 ! 차이: null 값에 !를 붙이면 왜 런타임 오류가 날까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/dart-nullable-bang-operator-runtime-error</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/dart-nullable-bang-operator-runtime-error</guid>
          <description>Dart nullable 타입과 null 확인 연산자의 차이를 최소 예제로 확인하고 안전한 기본값·조건 분기 선택 기준을 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>JavaScript Promise.all 하나가 실패하면 나머지 작업도 멈출까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/javascript-promise-all-rejection-pending-work</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/javascript-promise-all-rejection-pending-work</guid>
          <description>Promise.all이 첫 실패로 거부된 뒤에도 이미 시작한 작업이 계속되는지 두 비동기 작업의 로그로 확인하고, 결과를 모두 모아야 할 때의 선택을 정리합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>Bash while read 마지막 줄 누락: IFS와 -r을 함께 쓰는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/bash-while-read-final-line-ifs</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/bash-while-read-final-line-ifs</guid>
          <description>줄 끝 개행이 없는 파일을 while read로 읽을 때 마지막 줄이 빠지는 이유와 공백·역슬래시를 보존하는 입력 패턴을 작은 예제로 확인합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>pandas loc와 iloc 차이: 필터 후 첫 행이 KeyError가 나는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/pandas-loc-iloc-filtered-row-label</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/pandas-loc-iloc-filtered-row-label</guid>
          <description>DataFrame을 필터링한 뒤 첫 행을 읽을 때 loc[0]이 실패하고 iloc[0]은 동작하는 이유를 행 라벨과 위치로 구분합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>AWS EBS 스냅샷 일관성: 생성했는데 최신 데이터가 빠질 수 있는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-ebs-snapshot-buffer-consistency-restore</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-ebs-snapshot-buffer-consistency-restore</guid>
          <description>EBS 볼륨 스냅샷과 애플리케이션·운영체제 버퍼의 경계를 구분하고 쓰기 중단·복원 검증을 계획하는 방법을 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Dart final과 const 차이: final 리스트에 add가 되는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/dart-final-const-list-content</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/dart-final-const-list-content</guid>
          <description>Dart에서 final 변수의 재할당 금지와 const 리스트의 변경 불가를 같은 목록으로 비교하고, 바뀌면 안 되는 데이터를 전달할 때의 경계를 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>HTML form 안의 button이 폼을 제출할 때: type=button과 submit 구분</title>
          <link>https://www.taeyoungkim.dev/ko/blog/html-form-button-type-submit-default</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/html-form-button-type-submit-default</guid>
          <description>도움말 버튼을 눌렀는데 폼이 제출되는 이유를 링크·일반 버튼·제출 버튼의 역할과 재현 예제로 구분합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>Azure Traffic Manager 우선순위 라우팅: 장애 전환이 바로 보이지 않는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/azure-traffic-manager-priority-failover-dns</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/azure-traffic-manager-priority-failover-dns</guid>
          <description>Traffic Manager의 Priority 방식에서 정상 엔드포인트 선택과 모니터링, DNS 캐시 때문에 전환이 즉시 보이지 않을 수 있는 이유를 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>pandas groupby count와 size 차이: 빈 측정값이 행 수에서 빠질 때</title>
          <link>https://www.taeyoungkim.dev/ko/blog/pandas-groupby-count-size-null-wait</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/pandas-groupby-count-size-null-wait</guid>
          <description>채널별 접수 행 수와 대기시간이 기록된 건수를 같은 다섯 행으로 비교해 groupby의 size와 count가 서로 다른 분모를 세는 이유를 확인합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Argo CD OutOfSync 뜻: Git과 Kubernetes 실제 상태가 달라졌을 때</title>
          <link>https://www.taeyoungkim.dev/ko/blog/argocd-gitops-outofsync-live-state</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/argocd-gitops-outofsync-live-state</guid>
          <description>GitOps에서 Git의 원하는 상태와 클러스터의 현재 상태를 비교하고 수동·자동 동기화를 선택할 때 확인할 점을 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Dart factory 생성자와 named constructor 차이: 기존 객체를 다시 쓰려면?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/dart-factory-named-constructor-cache</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/dart-factory-named-constructor-cache</guid>
          <description>Dart의 일반 named constructor는 새 객체를 만들고 factory는 기존 객체를 반환할 수 있다는 차이를 포트 값의 파싱·검증·캐시 예제로 확인합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>SQL LEFT JOIN ON과 WHERE 차이: 공개 사진이 없는 상품도 남기는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-left-join-on-where-public-assets</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-left-join-on-where-public-assets</guid>
          <description>상품은 모두 보여 주되 공개된 사진만 붙이려면 LEFT JOIN의 필터를 어디에 둬야 할까요? 공개·초안·사진 없음 세 경우를 같은 SQL로 비교합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>Spring AOP @Around 로그가 안 찍힐 때: 자기 호출과 프록시 경계</title>
          <link>https://www.taeyoungkim.dev/ko/blog/spring-aop-self-invocation-proxy-boundary</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/spring-aop-self-invocation-proxy-boundary</guid>
          <description>Spring 빈의 메서드를 외부에서 부를 때는 @Around가 실행되는데 같은 객체의 다른 메서드에서 부르면 빠지는 이유를 프록시 진입 경로로 설명합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>Azure Bastion으로 VM 접속: VM의 공용 IP 없이 SSH가 되는 경로</title>
          <link>https://www.taeyoungkim.dev/ko/blog/azure-bastion-vm-private-ip-ssh-path</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/azure-bastion-vm-private-ip-ssh-path</guid>
          <description>Azure VM에 공용 IP를 붙이지 않고 Bastion을 통해 SSH·RDP에 접속할 때 브라우저, Bastion, VM의 사설 IP가 각각 맡는 역할을 구분합니다.</description>
          <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Terraform plan과 state drift: 코드와 실제 인프라가 달라질 때 확인할 순서</title>
          <link>https://www.taeyoungkim.dev/ko/blog/terraform-plan-state-drift-safety</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/terraform-plan-state-drift-safety</guid>
          <description>Terraform plan이 보여 주는 변경과 state drift의 원인, apply 전에 범위와 공유 상태를 안전하게 검토하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Kubernetes Deployment와 Service 차이: 파드 교체와 네트워크 진입점을 나누는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/kubernetes-deployment-service-difference</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/kubernetes-deployment-service-difference</guid>
          <description>Deployment가 원하는 파드 상태를 유지하는 역할과 Service가 안정적인 접근 지점을 제공하는 역할을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AWS Lambda timeout과 재시도: 같은 작업이 두 번 실행될 수 있는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-lambda-timeout-retry-idempotency</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-lambda-timeout-retry-idempotency</guid>
          <description>Lambda의 제한 시간과 비동기 재시도에서 중복 실행을 전제로 멱등성과 실패 처리를 설계하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>CloudWatch CPU 경보가 데이터 부족일 때: 지표·임계값·알림 확인 순서</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-cloudwatch-cpu-alarm-insufficient-data</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-cloudwatch-cpu-alarm-insufficient-data</guid>
          <description>EC2 CPU 사용률 경보의 데이터 부족 상태를 출발점으로 지표, 평가 조건, SNS 구독과 경보 전환을 구분해 점검합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AWS IAM Explicit Deny는 왜 Allow보다 우선할까? 권한 오류 읽는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-iam-explicit-deny-policy-evaluation</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-iam-explicit-deny-policy-evaluation</guid>
          <description>IAM 정책 평가에서 명시적 거부가 허용보다 우선하는 이유와 권한 문제를 최소 범위로 진단하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Route 53 A·CNAME 레코드 차이: IP 주소와 호스트 이름 중 무엇을 연결할까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/route53-a-cname-ip-hostname</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/route53-a-cname-ip-hostname</guid>
          <description>Route 53의 A·CNAME 레코드가 가리키는 값의 차이와 DNS 변경 뒤 확인할 순서를 작은 예제로 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>CloudFront 배포 삭제 버튼이 안 될 때: 비활성화부터 확인하는 순서</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-cloudfront-disable-before-delete</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-cloudfront-disable-before-delete</guid>
          <description>CloudFront 배포를 삭제하기 전 비활성화가 필요한 이유와 상태·연결 도메인·원본을 점검하는 순서를 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AWS S3 버킷 삭제가 안 될 때: 객체를 비우고 삭제 범위를 확인하는 순서</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-s3-bucket-empty-before-delete</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-s3-bucket-empty-before-delete</guid>
          <description>S3 버킷의 객체 삭제와 버킷 삭제를 구분하고, 비우기 전 대상·버전·연결 서비스를 확인하는 순서를 알아봅니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AWS S3 퍼블릭 액세스 차단: 버킷을 공개하기 전에 확인할 경계</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-s3-public-access-block-policy</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-s3-public-access-block-policy</guid>
          <description>S3 공개 접근을 차단하는 설정과 버킷 정책·객체 권한의 관계, 정적 웹 자산을 안전하게 제공하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AWS RDS 자동 백업과 스냅샷 차이: 복구 계획은 어떻게 세울까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-rds-backup-snapshot-restore-plan</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-rds-backup-snapshot-restore-plan</guid>
          <description>RDS 자동 백업과 수동 스냅샷의 목적을 구분하고, 백업 존재와 실제 복구 가능성을 함께 검토하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AWS Auto Scaling desired capacity는 무엇을 뜻할까? 최소·최대 용량과 함께 읽기</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-auto-scaling-desired-capacity-basics</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-auto-scaling-desired-capacity-basics</guid>
          <description>Auto Scaling 그룹의 minimum, desired, maximum capacity가 각각 어떤 역할을 하는지와 수동 변경의 운영 영향을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AWS EBS 볼륨 연결과 마운트: 새 디스크와 기존 데이터를 구분하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-ebs-attach-mount-filesystem-safety</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-ebs-attach-mount-filesystem-safety</guid>
          <description>EBS를 인스턴스에 연결한 뒤 장치 식별, 파일시스템 확인, 마운트와 재부팅 후 설정을 안전하게 처리하는 순서를 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AWS EC2 퍼블릭 IP가 바뀌는 이유와 고정 주소를 검토할 때</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-ec2-public-ip-elastic-ip-basics</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-ec2-public-ip-elastic-ip-basics</guid>
          <description>EC2 인스턴스의 공용 IP 수명과 DNS·로드 밸런서·고정 IP를 선택할 때 고려할 운영 경계를 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Docker --rm 뒤에도 데이터를 남기려면? named volume 확인 방법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/docker-volume-data-persistence-backup</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/docker-volume-data-persistence-backup</guid>
          <description>컨테이너를 자동 삭제해도 named volume의 파일이 남는지 확인하고, bind mount와 백업의 경계를 구분합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Docker 포트 매핑: 컨테이너 포트와 호스트 포트가 다른 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/docker-port-mapping-host-container</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/docker-port-mapping-host-container</guid>
          <description>Docker의 host:container 포트 매핑을 읽고, 서비스가 외부에서 열리지 않을 때 확인할 경계를 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Docker 이미지와 컨테이너 차이: 빌드 결과와 실행 인스턴스를 구분하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/docker-image-container-difference</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/docker-image-container-difference</guid>
          <description>Docker image와 container의 역할, 재현 가능한 이미지 빌드, 컨테이너가 사라져도 데이터가 남아야 하는 이유를 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Azure CLI와 PowerShell 명령을 실행하기 전 리소스 범위를 확인하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/azure-cli-powershell-command-scope</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/azure-cli-powershell-command-scope</guid>
          <description>클라우드 명령의 구독·리소스 그룹·리전·이름 범위를 먼저 확인하고, 생성과 삭제를 안전하게 구분하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>클라우드 NSG와 보안 그룹 인바운드 규칙: 포트를 열기 전 정할 것</title>
          <link>https://www.taeyoungkim.dev/ko/blog/cloud-nsg-security-group-inbound-rule</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/cloud-nsg-security-group-inbound-rule</guid>
          <description>인바운드 규칙에서 출발지·프로토콜·포트를 최소 권한으로 정하고, Azure NSG의 우선순위와 AWS 보안 그룹의 차이를 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>TCP 연결이 안 될 때 IP·포트·리스닝 상태를 확인하는 순서</title>
          <link>https://www.taeyoungkim.dev/ko/blog/tcp-ip-port-connection-failure-basics</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/tcp-ip-port-connection-failure-basics</guid>
          <description>서비스 연결 실패를 DNS, IP 경로, 포트 리스닝, 방화벽 순서로 나눠 진단하는 기본 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>LLM이 첨부 자료에 없는 사실을 말할 때: 근거 우선순위와 보류 응답 설계</title>
          <link>https://www.taeyoungkim.dev/ko/blog/llm-attached-material-grounding-uncertainty</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/llm-attached-material-grounding-uncertainty</guid>
          <description>첨부 문서를 근거로 답하는 AI가 자료 밖의 사실을 추측하지 않도록 범위를 정하고, 불확실성을 안전하게 표현하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>AI 보고서 표에서 필수 항목이 빠졌을 때: 출력 형식 검수하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/llm-report-output-required-fields-check</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/llm-report-output-required-fields-check</guid>
          <description>AI가 보고서 표를 만들었을 때 양식의 열과 필수 사실을 구분해 확인하고, 누락된 항목을 임의로 채우지 않는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>LLM 단일 프롬프트와 다단계 프롬프트: 작업을 나누는 기준</title>
          <link>https://www.taeyoungkim.dev/ko/blog/llm-single-multi-step-prompt-workflow</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/llm-single-multi-step-prompt-workflow</guid>
          <description>한 번의 요청으로 끝낼 일과 추출·검토·작성 단계를 나눠야 할 일을 구분하고, 중간 산출물을 검증하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>LLM 시스템 프롬프트와 사용자 요청: 업무 봇의 역할·범위를 나누는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/llm-system-user-prompt-role-boundary</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/llm-system-user-prompt-role-boundary</guid>
          <description>업무 보고서 봇에서 고정 역할과 개별 요청을 분리하고, 정보가 부족할 때 양식을 임의로 고르지 않는 흐름을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>pandas 결측치 처리: dropna와 fillna를 선택하기 전에 확인할 것</title>
          <link>https://www.taeyoungkim.dev/ko/blog/pandas-missing-values-dropna-fillna-decision</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/pandas-missing-values-dropna-fillna-decision</guid>
          <description>pandas에서 isna로 결측치의 위치와 비율을 확인하고, dropna와 fillna가 결과 행·자료형·분석 의미에 미치는 차이를 예제로 살펴봅니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>pandas merge 뒤 행이 늘어나는 이유: 중복 키와 조인 카디널리티 확인</title>
          <link>https://www.taeyoungkim.dev/ko/blog/pandas-merge-duplicate-rows-cardinality</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/pandas-merge-duplicate-rows-cardinality</guid>
          <description>pandas merge가 예상보다 많은 행을 만드는 중복 키 문제와 validate 옵션으로 조인 관계를 검증하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Python JSON에 없는 키를 읽을 때 KeyError를 피하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-json-missing-key-get-validation</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-json-missing-key-get-validation</guid>
          <description>딕셔너리 대괄호 접근과 get의 차이, API 응답에서 필수 키와 선택 키를 검증하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>BeautifulSoup select_one이 None일 때: 크롤링 선택자를 안전하게 점검하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/beautifulsoup-select-one-none-handling</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/beautifulsoup-select-one-none-handling</guid>
          <description>select_one이 요소를 찾지 못할 때 None을 반환하는 이유와 HTML 변화, 선택자, 누락 데이터를 분리해 처리하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Python requests timeout과 status code 확인: 네트워크 요청을 안전하게 다루는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-requests-timeout-status-check</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-requests-timeout-status-check</guid>
          <description>requests.get에 timeout을 두고 HTTP 상태와 JSON 파싱 실패를 구분하는 기본 패턴을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Python 리스트 컴프리헨션: 짧게 쓰되 읽기 쉬운 변환으로 만드는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-list-comprehension-readability-filter-map</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-list-comprehension-readability-filter-map</guid>
          <description>리스트 컴프리헨션의 변환·필터 순서와 여러 조건이 길어질 때 일반 for문으로 돌아가야 하는 기준을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Python local과 global 스코프: UnboundLocalError가 생기는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-local-global-scope-unboundlocalerror</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-local-global-scope-unboundlocalerror</guid>
          <description>함수 안 대입이 지역 변수를 만드는 규칙과 global 대신 반환값으로 상태를 전달하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Python 함수가 None을 반환하는 이유: return 누락을 찾는 방법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-function-return-none-debugging</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-function-return-none-debugging</guid>
          <description>명시적 return이 없는 함수가 None을 반환하는 규칙과 조건 분기에서 결과가 사라지는 오류를 디버깅하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Python truthy와 falsy: 빈 값 검사에서 None과 빈 문자열을 구분하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-truthy-falsy-empty-values</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-truthy-falsy-empty-values</guid>
          <description>if 값이 어떤 객체를 false로 보는지와 None, 빈 문자열, 0을 구분해야 하는 입력 검증 기준을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Python venv와 pip: 설치했는데 ModuleNotFoundError가 나는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-venv-pip-interpreter-mismatch</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-venv-pip-interpreter-mismatch</guid>
          <description>pip가 다른 Python에 패키지를 설치하는 문제를 venv 활성화와 python -m pip 기준으로 해결합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Flutter 암시적 애니메이션과 명시적 애니메이션은 언제 나눌까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/flutter-implicit-explicit-animation-choice</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/flutter-implicit-explicit-animation-choice</guid>
          <description>AnimatedContainer 같은 암시적 애니메이션과 AnimationController를 쓰는 명시적 애니메이션의 선택 기준을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>Flutter 네이티브 스플래시가 안 바뀔 때: 생성 자산과 시작 화면 확인</title>
          <link>https://www.taeyoungkim.dev/ko/blog/flutter-native-splash-screen-setup-checks</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/flutter-native-splash-screen-setup-checks</guid>
          <description>Flutter 네이티브 스플래시를 바꿨는데 이전 화면이 보일 때 생성 자산·재빌드·콜드 스타트와 플랫폼별 표시를 확인하는 방법을 정리합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>Flutter 패키지 라이선스와 유지 상태는 어떻게 확인할까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/flutter-package-license-security-review</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/flutter-package-license-security-review</guid>
          <description>패키지 기능만 보고 추가하지 않기 위해 라이선스, 유지보수, 권한, 의존성 범위를 확인하는 기준을 정리합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>보안</category>
        </item>
        <item>
          <title>Flutter pub add와 버전 제약: 패키지를 추가할 때 의존성 충돌을 줄이는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/flutter-pub-add-version-constraint</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/flutter-pub-add-version-constraint</guid>
          <description>pub add가 pubspec.yaml을 바꾸는 방식과 caret 버전 제약을 읽고 업데이트를 검증하는 순서를 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>React Router loader로 데이터 로딩하기: 화면 렌더링 전 오류를 다루는 방법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/react-router-loader-data-loading-error-boundary</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/react-router-loader-data-loading-error-boundary</guid>
          <description>React Router Data Mode의 loader가 데이터를 준비하는 시점과 오류 화면, 요청 취소를 화면 경계에서 다루는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>React useEffect cleanup은 언제 필요한가? 구독과 요청을 정리하는 기준</title>
          <link>https://www.taeyoungkim.dev/ko/blog/react-useeffect-cleanup-subscription-request</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/react-useeffect-cleanup-subscription-request</guid>
          <description>useEffect의 cleanup이 실행되는 시점과 이벤트 리스너, 타이머, 요청을 컴포넌트 수명에 맞게 정리하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>React 배열 상태를 직접 수정하면 왜 화면이 갱신되지 않을까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/react-array-state-immutability-update</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/react-array-state-immutability-update</guid>
          <description>push와 splice로 state 배열을 바꾸면 생기는 문제와 map, filter, spread로 새 배열을 만드는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>JavaScript Promise 체인에서 return을 빼먹으면 왜 다음 then이 undefined가 될까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/javascript-promise-then-missing-return-chain</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/javascript-promise-then-missing-return-chain</guid>
          <description>Promise.then 콜백의 반환값이 다음 단계로 전달되는 방식과 fetch 처리에서 return을 놓치지 않는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>JavaScript map과 forEach 차이: 새 배열이 필요할 때 무엇을 써야 할까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/javascript-map-foreach-return-array-difference</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/javascript-map-foreach-return-array-difference</guid>
          <description>map이 반환하는 새 배열과 forEach의 반복 목적을 비교하고, 렌더링과 부수 효과를 구분하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>JavaScript default export와 named export 차이: import 오류를 줄이는 기준</title>
          <link>https://www.taeyoungkim.dev/ko/blog/javascript-export-default-named-import-difference</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/javascript-export-default-named-import-difference</guid>
          <description>default export와 named export의 import 문법이 다른 이유와, 모듈 API를 읽기 쉽게 설계하는 기준을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>JavaScript 이벤트 버블링과 이벤트 위임: 동적으로 추가한 목록에도 클릭을 연결하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/javascript-event-bubbling-delegation-list-items</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/javascript-event-bubbling-delegation-list-items</guid>
          <description>이벤트 버블링을 이용해 목록 부모에 한 번만 리스너를 두고, 자식 버튼을 안전하게 처리하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>JavaScript DOMContentLoaded와 defer: DOM을 찾기 전에 스크립트가 실행되는 문제</title>
          <link>https://www.taeyoungkim.dev/ko/blog/javascript-domcontentloaded-defer-script-timing</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/javascript-domcontentloaded-defer-script-timing</guid>
          <description>querySelector가 null을 반환할 때 script 위치, defer, DOMContentLoaded의 실행 순서를 기준으로 해결합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>CSS position relative와 absolute: 배지 위치가 엉뚱한 곳으로 가는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/css-position-relative-absolute-containing-block</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/css-position-relative-absolute-containing-block</guid>
          <description>absolute 요소가 어느 상자를 기준으로 위치를 잡는지와 relative를 부모에 두는 이유를 예제로 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>CSS box-sizing과 overflow: 요소 너비가 화면을 넘을 때 확인할 순서</title>
          <link>https://www.taeyoungkim.dev/ko/blog/css-box-sizing-overflow-layout-debugging</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/css-box-sizing-overflow-layout-debugging</guid>
          <description>width가 맞아 보이는데 레이아웃이 넘치는 이유를 box-sizing, padding, border, overflow 관점에서 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>HTML 시맨틱 태그를 쓰면 접근성과 구조가 어떻게 좋아질까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/html-semantic-tags-accessibility-basics</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/html-semantic-tags-accessibility-basics</guid>
          <description>div만으로 만든 화면을 header, nav, main, article 같은 시맨틱 태그로 나눌 때 얻는 구조와 접근성 이점을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>Ubuntu apt update와 apt upgrade 차이: 패키지 목록 갱신과 설치를 구분하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/ubuntu-apt-update-upgrade-package-list-difference</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/ubuntu-apt-update-upgrade-package-list-difference</guid>
          <description>apt update가 저장소의 패키지 목록을 갱신하고 apt upgrade가 설치된 패키지를 실제로 바꾸는 과정을 확인합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>SQL INSERT 후 COMMIT과 ROLLBACK: 트랜잭션을 되돌릴 수 있는 범위</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-insert-commit-rollback-transaction-basics</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-insert-commit-rollback-transaction-basics</guid>
          <description>INSERT가 즉시 확정되지 않는 이유와 COMMIT·ROLLBACK의 경계, 테스트 데이터를 안전하게 다루는 순서를 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>SQL CREATE TABLE의 DEFAULT와 NOT NULL: 새 행의 기본값을 안전하게 설계하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-create-table-default-not-null-design</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-create-table-default-not-null-design</guid>
          <description>DEFAULT와 NOT NULL이 각각 언제 적용되는지, INSERT에서 NULL과 열 생략이 왜 다른지 예제로 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>Spring JdbcTemplate와 JPA는 어떻게 선택할까? 데이터 접근 기술의 경계</title>
          <link>https://www.taeyoungkim.dev/ko/blog/spring-jdbctemplate-jpa-data-access-boundary</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/spring-jdbctemplate-jpa-data-access-boundary</guid>
          <description>JdbcTemplate와 JPA가 숨기는 복잡성의 차이, 조회·변경 쿼리와 트랜잭션을 기준으로 선택하는 방법을 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>Spring 컴포넌트 스캔과 Java 설정: Bean 등록 방식은 언제 나눌까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/spring-component-scan-java-config-boundary</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/spring-component-scan-java-config-boundary</guid>
          <description>@ComponentScan과 @Bean이 각각 어떤 객체를 Spring 컨테이너에 등록하는지, 설정 경계를 어떻게 잡을지 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>Spring @ResponseBody는 문자열과 객체를 어떻게 응답으로 보낼까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/spring-responsebody-string-object-json</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/spring-responsebody-string-object-json</guid>
          <description>@ResponseBody가 뷰 이름이 아닌 HTTP 본문을 만들고, 객체가 JSON으로 변환될 때 확인할 점을 정리합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>Spring Model과 Thymeleaf: Controller 데이터를 HTML에 안전하게 보여주는 방법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/spring-model-thymeleaf-data-binding-basics</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/spring-model-thymeleaf-data-binding-basics</guid>
          <description>Spring MVC의 Model에 값을 담고 Thymeleaf 템플릿에서 꺼내는 기본 흐름, null과 표시 책임의 경계를 설명합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>Spring Boot 정적 콘텐츠와 Controller가 함께 있을 때 무엇이 먼저 동작할까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/spring-static-content-controller-priority</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/spring-static-content-controller-priority</guid>
          <description>같은 경로에 정적 파일과 Controller 매핑이 있을 때 Spring Boot가 요청을 찾는 순서와 안전한 확인 방법을 정리합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>리눅스 chmod 755와 u+x 차이: 실행 권한만 추가하려면 무엇을 써야 할까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-chmod-755-vs-u-plus-x-preserve-permissions</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-chmod-755-vs-u-plus-x-preserve-permissions</guid>
          <description>기존 권한이 640인 파일에 실행 권한만 더할 때 chmod u+x와 chmod 755가 각각 무엇을 바꾸는지 같은 deploy.sh 파일로 확인합니다.</description>
          <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>S3 폴더는 실제 디렉터리일까? 객체 키 prefix와 빈 폴더의 정체</title>
          <link>https://www.taeyoungkim.dev/ko/blog/s3-folder-prefix-object-key-zero-byte</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/s3-folder-prefix-object-key-zero-byte</guid>
          <description>S3 콘솔의 폴더가 객체 키의 접두사로 보이는 이유와, 빈 폴더를 만들 때 생기는 0바이트 객체를 같은 키 예제로 구분합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AI 학습자료 수정: 목표를 바꿨는데 실습은 예전 내용인 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/ai-learning-material-goal-change-curriculum-exercises</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/ai-learning-material-goal-change-curriculum-exercises</guid>
          <description>학습 목표가 바뀐 뒤 목차와 실습이 어긋나지 않게, 승인된 단계와 다시 확인할 단계를 분리하는 방법을 살펴봅니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>AI 보고서 작성: 정보가 부족할 때 먼저 질문하고 초안을 멈추는 방법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/ai-report-draft-missing-fields-ask-first</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/ai-report-draft-missing-fields-ask-first</guid>
          <description>업무 진행 보고서에 기간·다음 계획·이슈가 빠졌다면 AI가 빈칸을 추측하지 않도록 입력을 확인하고, 필요한 질문을 먼저 돌려주는 흐름을 살펴봅니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>CSS animation 끝나면 원래 자리로 돌아가는 이유: animation-fill-mode forwards</title>
          <link>https://www.taeyoungkim.dev/ko/blog/css-animation-fill-mode-forwards-reset</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/css-animation-fill-mode-forwards-reset</guid>
          <description>CSS 애니메이션이 끝난 뒤 요소가 제자리로 돌아오는 이유를 같은 이동 예제로 살펴보고, animation-fill-mode: forwards와 실제 UI 상태의 차이를 설명합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>Spring Data JPA 조회 0건: Optional.empty()가 404가 되는 곳</title>
          <link>https://www.taeyoungkim.dev/ko/blog/spring-data-jpa-optional-empty-region-404</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/spring-data-jpa-optional-empty-region-404</guid>
          <description>Spring Data JPA의 findByRegion()이 결과를 찾지 못했을 때 Optional.empty()를 반환하는 이유와, 서비스에서 404를 선택하는 위치를 같은 지역 조회로 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>SQL UNIQUE에 NULL이 여러 개 들어가는 이유: PRIMARY KEY와 차이</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-unique-multiple-null-primary-key-difference</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-unique-multiple-null-primary-key-difference</guid>
          <description>UNIQUE 제약을 걸었는데 NULL 행은 두 개 저장되고 같은 이메일은 거부됩니다. SQLite 예제로 NULL·빈 문자열·NOT NULL·PRIMARY KEY의 차이를 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>SQL COUNT(*)와 COUNT(컬럼) 차이: NULL은 왜 건수에서 빠질까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-count-star-column-null-rows</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-count-star-column-null-rows</guid>
          <description>같은 작업 네 건에서 COUNT(*)는 4, COUNT(retry_count)는 3이 되는 이유를 NULL과 0의 차이, WHERE 필터까지 한 예제로 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>파이썬 set 중복 제거 후 순서가 바뀌는 이유: 입력 순서 유지하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-set-deduplicate-preserve-order</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-set-deduplicate-preserve-order</guid>
          <description>list(set(items))로 중복을 지우면 순서가 보장되지 않습니다. dict.fromkeys()로 첫 등장 순서를 유지하는 방법과 sorted(set())의 차이를 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>AI 페르소나 프롬프트: 역할 설정이 미확인 경력으로 번지지 않게 하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/ai-persona-prompt-verified-facts-career-claims</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/ai-persona-prompt-verified-facts-career-claims</guid>
          <description>AI 페르소나의 말투·역할과 검증된 이력을 분리하고, 생성된 성과·경력 문장을 공개 전에 확인하는 작은 검수 흐름을 살펴봅니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>파이썬 list.sort() 결과가 None인 이유: sorted()와 원본 변경 차이</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-list-sort-returns-none-vs-sorted</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-list-sort-returns-none-vs-sorted</guid>
          <description>list.sort()로 정렬한 값을 변수에 담았더니 None이 나오는 이유와 sorted()를 써서 새 리스트를 만드는 방법을 같은 예제로 비교합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>SQL DISTINCT 여러 컬럼 중복 제거: 한 컬럼이 계속 중복되는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-distinct-multiple-columns-combination-duplicates</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-distinct-multiple-columns-combination-duplicates</guid>
          <description>DISTINCT를 썼는데 Seoul이 두 줄 남았다면, SQL은 한 컬럼이 아니라 SELECT에 적은 컬럼 조합을 비교하고 있을 수 있습니다. 같은 주문 데이터로 결과를 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>파이썬 range() 끝값이 빠지는 이유: 마지막 번호와 리스트 인덱스 확인법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-range-stop-exclusive-enumerate-index</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-range-stop-exclusive-enumerate-index</guid>
          <description>range(1, 4)의 결과가 1, 2, 3인 이유를 파일 목록 번호 매기기로 확인하고, 끝값·인덱스 혼동을 피하는 방법을 설명합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>AWS CLI는 되는데 JavaScript SDK는 AccessDenied? 프로필·권한 확인법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-cli-sdk-accessdenied-profile-permission</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-cli-sdk-accessdenied-profile-permission</guid>
          <description>같은 S3 버킷 조회가 CLI에서는 성공하고 Node.js SDK에서는 거부될 때, 실행 주체·자격 증명 출처·요청 권한을 구분해 확인하는 순서입니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AWS Lambda 테스트 성공인데 응답은 실패? Response·로그·Duration 확인법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-lambda-test-succeeded-response-function-logs-duration</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-lambda-test-succeeded-response-function-logs-duration</guid>
          <description>Lambda 테스트의 실행 성공과 업무 결과는 다릅니다. 같은 이벤트로 반환값, console.log, 실행 시간을 구분하고 로그가 보이지 않을 때 확인할 순서를 정리합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>SQL 서브쿼리 =와 IN 차이: 여러 행일 때 조회 결과가 빠지는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-subquery-equals-in-multiple-rows-team-filter</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-subquery-equals-in-multiple-rows-team-filter</guid>
          <description>서브쿼리가 팀 ID 두 개를 반환하는데 =로 비교하면 직원이 일부만 나올 수 있습니다. 같은 데이터로 단일 값 비교와 IN의 여러 값 비교를 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>파이썬 튜플은 불변인데 안의 리스트는 왜 바뀔까? append와 TypeError 차이</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-tuple-contains-list-mutable-append</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-tuple-contains-list-mutable-append</guid>
          <description>튜플의 원소 재할당은 실패하는데 내부 리스트의 append는 성공하는 이유를 같은 객체로 확인합니다. tuple(list) 변환과 딕셔너리 키에서 주의할 점도 짚습니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>DynamoDB Query와 Scan 차이: 필터를 붙여도 읽기 비용이 줄지 않는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/dynamodb-query-scan-filter-read-capacity</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/dynamodb-query-scan-filter-read-capacity</guid>
          <description>같은 학생 성적 3건을 돌려주는 Query와 Scan을 비교해, FilterExpression이 언제 적용되고 ScannedCount와 읽기 용량을 어떻게 확인하는지 설명합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>SQL 셀프 조인: 상사가 없는 직원이 INNER JOIN에서 사라지는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-self-join-manager-inner-left-join-missing-root</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-self-join-manager-inner-left-join-missing-root</guid>
          <description>직원과 상사가 같은 테이블에 있을 때 셀프 조인으로 연결하고, 상사가 없는 직원이 INNER JOIN에서 빠지는 이유와 LEFT JOIN으로 남기는 방법을 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>JavaScript forEach에서 await가 안 기다리는 이유: for...of와 Promise.all 선택</title>
          <link>https://www.taeyoungkim.dev/ko/blog/javascript-foreach-async-await-not-waiting</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/javascript-foreach-async-await-not-waiting</guid>
          <description>forEach(async ...) 뒤의 완료 로그가 작업보다 먼저 찍히는 이유를 한 비동기 저장 예제로 확인하고, 순차 처리와 동시 처리를 각각 for...of·Promise.all로 구분합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>JavaScript fetch 타임아웃: Promise.race만 쓰면 요청이 계속되는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/javascript-fetch-timeout-promise-race-abortcontroller</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/javascript-fetch-timeout-promise-race-abortcontroller</guid>
          <description>Promise.race로 제한시간을 걸어도 fetch 요청은 왜 계속될까요? 같은 느린 응답으로 타이머와 AbortController의 차이, 취소 범위와 정리 방법을 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>CloudWatch CPU 경보 메일이 안 올 때: 데이터 부족과 SNS 구독 확인</title>
          <link>https://www.taeyoungkim.dev/ko/blog/cloudwatch-cpu-alarm-email-missing-data-sns-confirmation</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/cloudwatch-cpu-alarm-email-missing-data-sns-confirmation</guid>
          <description>EC2 CPU 경보를 만들었는데 이메일이 오지 않을 때, CloudWatch의 데이터 부족·5분 평균·ALARM 상태와 SNS 구독 확인을 한 사례로 구분합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Flutter 상태값은 바뀌는데 화면은 그대로: setState와 build 확인 순서</title>
          <link>https://www.taeyoungkim.dev/ko/blog/flutter-setstate-state-changes-ui-not-updating</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/flutter-setstate-state-changes-ui-not-updating</guid>
          <description>Flutter에서 값은 바뀌었는데 화면이 그대로인 이유를 한 개의 카운터로 살펴봅니다. setState가 재빌드를 예약하는 조건과 build가 실제로 읽는 값을 구분합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>JavaScript fetch 404 오류인데 catch가 실행되지 않는 이유: response.ok 확인법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/javascript-fetch-404-response-ok-catch</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/javascript-fetch-404-response-ok-catch</guid>
          <description>fetch가 404 응답을 받아도 Promise를 거부하지 않는 이유를 같은 요청으로 확인하고, response.ok로 HTTP 오류와 네트워크 오류를 구분합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>AWS IAM 읽기 전용 계정에서 EC2 생성이 거부되는 이유: 그룹 정책을 추가하면?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-iam-readonly-ec2-runinstances-group-policy</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-iam-readonly-ec2-runinstances-group-policy</guid>
          <description>AmazonEC2ReadOnlyAccess 사용자에게 EC2 조회는 되지만 생성이 거부될 때, IAM 사용자·그룹 정책과 암묵적 거부·명시적 거부를 같은 요청으로 비교합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Docker 컨테이너가 바로 종료되는 이유: Dockerfile CMD에 npm run build를 넣었다면</title>
          <link>https://www.taeyoungkim.dev/ko/blog/dockerfile-cmd-npm-build-container-exits</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/dockerfile-cmd-npm-build-container-exits</guid>
          <description>Dockerfile의 RUN과 CMD가 실행되는 시점을 구분하고, 빌드는 성공했지만 웹 컨테이너가 종료될 때 확인할 명령과 수정 방향을 정리합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Dart private(_) 범위: 다른 클래스에서는 되고 import하면 왜 안 될까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/dart-underscore-private-library-scope-import</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/dart-underscore-private-library-scope-import</guid>
          <description>Dart의 _ 필드는 클래스가 아니라 라이브러리 범위에서 감춰집니다. 같은 파일의 다른 클래스는 접근하고 import한 파일은 오류가 나는 이유를 한 예제로 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>Route 53 A 레코드를 만들었는데 접속이 안 된다면? NS 위임 확인법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/route53-a-record-not-working-ns-delegation</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/route53-a-record-not-working-ns-delegation</guid>
          <description>Route 53 공개 호스팅 영역에 A 레코드를 만들었는데도 도메인이 연결되지 않을 때, 등록처의 NS와 실제 DNS 응답을 확인하는 순서를 살펴봅니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>CloudFront X-Cache Miss·Hit 차이: 같은 URL을 다시 열어도 Miss가 뜨는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/cloudfront-x-cache-miss-hit-same-url</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/cloudfront-x-cache-miss-hit-same-url</guid>
          <description>CloudFront 응답의 X-Cache를 읽을 때 캐시 키와 TTL을 확인하는 순서, 브라우저의 304 응답과 혼동하지 않는 방법을 정리합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>S3 객체 URL AccessDenied: 콘솔에서는 다운로드되는데 브라우저에서 403이 나는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/s3-object-url-accessdenied-console-download-presigned-url</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/s3-object-url-accessdenied-console-download-presigned-url</guid>
          <description>S3 콘솔 다운로드와 객체 URL의 요청 주체가 다른 이유를 살펴보고, 비공개 파일을 공유할 때 공개 설정 대신 presigned URL을 선택하는 기준을 정리합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AWS RDS Multi-AZ와 Read Replica 차이: 대기 DB가 SELECT를 분산하지 않는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-rds-multi-az-read-replica-standby-difference</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-rds-multi-az-read-replica-standby-difference</guid>
          <description>RDS를 Multi-AZ로 바꿨는데 조회가 여전히 느리다면 배포 유형부터 확인하세요. 대기 인스턴스의 장애 조치와 읽기 복제본의 조회 분산을 같은 요청 흐름으로 비교합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Dart compile exe 실행 파일이 안 바뀌는 이유: JIT·AOT 차이</title>
          <link>https://www.taeyoungkim.dev/ko/blog/dart-jit-aot-run-compile-exe-source-change</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/dart-jit-aot-run-compile-exe-source-change</guid>
          <description>dart run은 수정한 소스를 실행하지만, 이미 만든 AOT 실행 파일은 자동으로 바뀌지 않습니다. 같은 Dart 파일을 수정·실행·재컴파일하며 JIT와 AOT의 차이를 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>AWS Auto Scaling 후 워드프레스 글이 보였다 안 보이는 이유: EC2별 로컬 DB 확인</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-auto-scaling-wordpress-post-disappears-local-db</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-auto-scaling-wordpress-post-disappears-local-db</guid>
          <description>Auto Scaling으로 EC2를 늘린 뒤 워드프레스 글이 새로고침마다 달라진다면, ALB 상태만 볼 게 아니라 인스턴스별 DB 연결도 확인해야 합니다. 로컬 MySQL과 공유 DB의 차이를 짚습니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>AI 업무 비서 요청 분류: 보고서·용어 설명을 섞지 않는 라우팅 방법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/ai-assistant-intent-routing-knowledge-base-boundary</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/ai-assistant-intent-routing-knowledge-base-boundary</guid>
          <description>한 AI 비서가 여러 업무를 맡을 때 요청을 한 모드로 확정하고 그 모드에 허용된 자료만 사용하도록 검증하는 방법을 살펴봅니다. 두 의도가 섞인 요청은 질문으로 되돌립니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>AWS ALB 대상 그룹 unhealthy: EC2는 실행 중인데 헬스 체크가 실패하는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/aws-alb-target-group-unhealthy-health-check-path</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/aws-alb-target-group-unhealthy-health-check-path</guid>
          <description>EC2가 실행 중이어도 ALB 대상 그룹은 unhealthy일 수 있습니다. 상태 검사 경로의 404 응답을 재현하고 포트·경로·성공 코드 확인 순서를 정리합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>Spring @Transactional 테스트 롤백: HTTP 요청 뒤 데이터가 남는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/spring-transactional-test-rollback-random-port</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/spring-transactional-test-rollback-random-port</guid>
          <description>통합 테스트에 @Transactional을 붙였는데도 데이터가 남는다면 테스트와 HTTP 서버의 트랜잭션 경계를 확인하세요. 롤백이 적용되는 범위와 안전한 데이터 정리 방법을 한 예제로 살펴봅니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>파이썬 *args와 **kwargs 차이: 위치·키워드 인수는 어디에 담길까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-args-kwargs-positional-keyword-unpacking</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-args-kwargs-positional-keyword-unpacking</guid>
          <description>*args는 남은 위치 인수를 튜플로, **kwargs는 키워드 인수를 딕셔너리로 받습니다. 함수 정의와 호출의 별표가 서로 무엇을 하는지 한 예제로 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>SQL WHERE와 HAVING 차이: GROUP BY에서 COUNT(*) 조건은 어디에 쓸까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-group-by-where-having-count-paid-orders</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-group-by-where-having-count-paid-orders</guid>
          <description>결제 완료 주문이 두 건 이상인 고객을 찾을 때 WHERE와 HAVING을 어떻게 나눠 쓰는지, 같은 주문 데이터로 결과를 비교합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>Spring @RequestParam 기본값: limit 생략은 10인데 abc는 왜 400일까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/spring-requestparam-defaultvalue-missing-invalid-int</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/spring-requestparam-defaultvalue-missing-invalid-int</guid>
          <description>Spring MVC에서 @RequestParam(defaultValue)가 누락·빈 값에 적용되는 방식과 숫자 변환 실패, 범위 검증의 차이를 limit 요청 하나로 살펴봅니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>SQL LIKE %와 _ 차이: 밑줄을 문자 그대로 검색하는 ESCAPE 사용법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-like-percent-underscore-escape-literal</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-like-percent-underscore-escape-literal</guid>
          <description>LIKE에서 %는 여러 글자, _는 한 글자를 뜻합니다. 밑줄이 포함된 코드를 찾을 때 엉뚱한 값이 섞이는 이유와 ESCAPE 사용법을 같은 데이터로 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>파이썬 딕셔너리 get()과 [] 차이: 없는 키는 KeyError일까 None일까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-dict-get-missing-key-keyerror-none</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-dict-get-missing-key-keyerror-none</guid>
          <description>딕셔너리에 없는 키를 []와 get()으로 읽었을 때의 차이, 기본값 지정과 실제 None 값 구분을 같은 프로필 예제로 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>Dart extends와 implements 차이: 메서드를 왜 다시 구현해야 할까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/dart-extends-implements-inherited-method-override</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/dart-extends-implements-inherited-method-override</guid>
          <description>Dart 클래스에서 extends는 기존 메서드 구현을 이어받지만 implements는 메서드 계약만 가져옵니다. 같은 Label 예제로 분석 오류와 수정 결과를 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>Spring @Autowired가 null인 이유: new 객체와 스프링 빈의 차이</title>
          <link>https://www.taeyoungkim.dev/ko/blog/spring-autowired-null-new-object-bean</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/spring-autowired-null-new-object-bean</guid>
          <description>직접 new로 만든 객체의 주입 필드가 null인 이유를 Spring 빈 생성 경로와 비교하고, 생성자 주입으로 더 일찍 오류를 확인하는 방법을 설명합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>SQL UPDATE WHERE 누락: 전체 행이 바뀌는 이유와 ROLLBACK 확인법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-update-without-where-rollback-affected-rows</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-update-without-where-rollback-affected-rows</guid>
          <description>한 행만 수정하려다 WHERE를 빠뜨리면 모든 행이 대상이 됩니다. 세 행으로 영향 범위, 커밋 전 취소, 조건을 고친 재실행을 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>CIDR /24와 /26 차이: IP가 속한 서브넷과 사용 가능 주소 계산</title>
          <link>https://www.taeyoungkim.dev/ko/blog/cidr-24-26-subnet-ip-range-azure-reserved</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/cidr-24-26-subnet-ip-range-azure-reserved</guid>
          <description>/24 네트워크를 /26 네 개로 나눌 때 10.20.30.70이 어느 범위에 속하는지 계산합니다. 서브넷 마스크, 경계 주소와 Azure 예약 IP까지 한 예제로 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>IntersectionObserver threshold 0.5: 스크롤할 때 콜백이 다시 실행되는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/intersectionobserver-threshold-half-repeat-callback</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/intersectionobserver-threshold-half-repeat-callback</guid>
          <description>IntersectionObserver의 threshold 0.5는 한 번만 실행하는 조건이 아닙니다. 카드가 50% 경계를 오갈 때 콜백이 다시 호출되는 이유와 intersectionRatio·unobserve로 한 번만 표시하는 방법을 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Web</category>
        </item>
        <item>
          <title>Dart named constructor 사용법: this(...)로 필드 초기화 중복 줄이기</title>
          <link>https://www.taeyoungkim.dev/ko/blog/dart-named-redirecting-constructor-shared-initialization</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/dart-named-redirecting-constructor-shared-initialization</guid>
          <description>Dart의 이름 있는 생성자와 전달 생성자를 같은 알림 객체로 비교합니다. 생성 경로마다 필드를 따로 초기화할 때 상태가 갈리는 이유와 this(...)로 한곳에 모으는 방법을 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>JavaScript setTimeout 0 실행 순서: Promise보다 늦는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/javascript-settimeout-zero-promise-execution-order</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/javascript-settimeout-zero-promise-execution-order</guid>
          <description>setTimeout에 0을 줬는데 동기 코드와 Promise.then 뒤에 실행되는 이유를 한 예제로 확인합니다. 0ms가 즉시 실행이나 작업 완료를 보장하지 않는다는 점도 짚습니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>Dart var와 dynamic 차이: 타입 추론과 런타임 오류는 언제 생길까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/dart-var-dynamic-type-inference-runtime-error</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/dart-var-dynamic-type-inference-runtime-error</guid>
          <description>Dart의 var는 초기값으로 타입을 추론하고 dynamic은 정적 검사를 건너뜁니다. 숫자 404를 대입하거나 문자열 메서드를 호출할 때 오류가 드러나는 시점을 비교합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>앱</category>
        </item>
        <item>
          <title>CSS Flex 가운데 정렬이 안 되는 이유: justify-content와 align-items의 축</title>
          <link>https://www.taeyoungkim.dev/ko/blog/css-flex-justify-align-axis-center</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/css-flex-justify-align-axis-center</guid>
          <description>Flexbox에서 justify-content와 align-items가 움직이는 방향은 flex-direction에 따라 달라집니다. 같은 세 항목을 row와 column에 놓고 가운데 정렬을 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>웹</category>
        </item>
        <item>
          <title>JUnit 테스트는 각각 통과하는데 전체 실행에서 실패하는 이유: static 저장소와 @AfterEach</title>
          <link>https://www.taeyoungkim.dev/ko/blog/spring-memory-repository-test-aftereach-static-state</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/spring-memory-repository-test-aftereach-static-state</guid>
          <description>메모리 리포지토리 테스트가 하나씩은 통과하는데 전체 실행에서 중복 예외가 납니다. static 저장소 공유와 @AfterEach 초기화의 범위, 더 나은 격리 방법을 같은 예제로 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>리눅스 폴더 용량 확인: ls -ldh와 du -sh 숫자가 다른 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-directory-size-ls-vs-du-hidden-folders</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-directory-size-ls-vs-du-hidden-folders</guid>
          <description>폴더에 큰 파일이 있는데 ls -ldh에는 작게 보이는 이유를 확인하고, du -sh와 하위 폴더별 용량으로 저장공간을 찾는 순서를 설명합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>파이썬 break와 continue 차이: 반복문은 언제 멈추고 건너뛸까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-break-continue-loop-difference</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-break-continue-loop-difference</guid>
          <description>for 반복문에서 continue는 현재 작업만 건너뛰고, break는 반복 자체를 끝냅니다. 같은 작업 목록으로 출력과 방문 범위를 비교합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>리눅스 폴더 cd Permission denied: chmod 644에서 실행 권한이 필요한 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-directory-chmod-644-cd-permission-denied</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-directory-chmod-644-cd-permission-denied</guid>
          <description>폴더 이름은 보이는데 cd가 거부될 때 읽기(r)와 실행(x) 권한의 차이를 같은 폴더에서 확인하고, 필요한 권한만 되돌리는 방법을 설명합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>SQL NULL 비교: = NULL이 0건인 이유와 IS NULL 사용법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-null-equality-is-null-zero-rows</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-null-equality-is-null-zero-rows</guid>
          <description>값이 없는 행은 있는데 WHERE completed_at = NULL은 0건을 반환합니다. 같은 네 행으로 UNKNOWN, IS NULL, IS NOT NULL과 수정 전 점검 방법을 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>리눅스 kill과 kill -9 차이: 프로세스 종료 전에 확인할 것</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-kill-term-vs-kill-9-process-cleanup</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-kill-term-vs-kill-9-process-cleanup</guid>
          <description>SIGTERM과 SIGKILL을 같은 작업에 보내 종료 결과를 비교하고, PID 확인부터 정리 완료 확인까지의 순서를 설명합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>SQL WHERE AND OR 우선순위: 괄호가 없으면 취소 주문이 섞이는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/sql-where-and-or-parentheses-filter-precedence</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/sql-where-and-or-parentheses-filter-precedence</guid>
          <description>결제 완료 주문만 조회하려는데 취소 주문이 섞였다면 WHERE의 AND·OR 묶음을 확인하세요. 같은 여섯 행으로 괄호 전후 결과와 IN 조건을 비교합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Backend &amp; Distributed Systems</category>
        </item>
        <item>
          <title>리눅스 gzip 폴더 압축 오류: tar.gz로 묶고 압축하는 방법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-gzip-directory-tar-czf-extract</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-gzip-directory-tar-czf-extract</guid>
          <description>gzip에 폴더를 넣으면 오류가 나는 이유를 알아보고, tar -czf로 디렉터리를 tar.gz 파일로 만든 뒤 목록 확인·별도 폴더 복원·원본 비교까지 진행합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>리눅스 cd는 왜 셸 내장 명령일까? type·which 차이와 현재 디렉터리 확인</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-bash-cd-builtin-type-which</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-bash-cd-builtin-type-which</guid>
          <description>cd와 ls가 Bash에서 실행되는 위치를 type으로 구분합니다. 자식 셸에서 cd를 실행해도 원래 셸의 pwd가 바뀌지 않는 이유와 which 결과를 읽을 때 주의할 점을 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>파이썬 append와 extend 차이: 리스트를 추가했는데 왜 중첩될까?</title>
          <link>https://www.taeyoungkim.dev/ko/blog/python-list-append-extend-nested-list</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/python-list-append-extend-nested-list</guid>
          <description>append([값1, 값2])는 리스트 한 개를, extend([값1, 값2])는 원소 두 개를 추가합니다. 같은 이벤트 목록으로 중첩, TypeError, 반환값 None을 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Data &amp; AI Systems</category>
        </item>
        <item>
          <title>리눅스 find -name &apos;*.log&apos;: 하위 폴더 파일이 안 보일 때 따옴표 확인법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-find-name-glob-quotes-nested-files</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-find-name-glob-quotes-nested-files</guid>
          <description>find -name에 *.log를 따옴표 없이 넣으면 셸이 먼저 펼칠 수 있습니다. 같은 폴더에서 누락을 재현하고 따옴표, -type f, 검색 시작 경로를 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>리눅스 grep으로 여러 로그에서 error 찾기: 대소문자·파일명·줄번호 확인법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-grep-error-multiple-logs-case-line-number</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-grep-error-multiple-logs-case-line-number</guid>
          <description>grep이 오류를 놓쳤다면 검색어의 대소문자와 파일 범위를 먼저 확인합니다. 같은 두 로그에서 -i, -n, -H와 앞뒤 문맥을 확인하고 검색 실패와 파일 오류를 구분합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>리눅스 head·tail 차이: 긴 로그의 앞·뒤와 새 로그만 확인하는 법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-head-tail-log-first-last-lines</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-head-tail-log-first-last-lines</guid>
          <description>cat으로 전부 출력하지 않고 head와 tail로 로그의 처음·끝을 골라 봅니다. tail -f와 -n 0의 차이, less로 돌아가 읽는 방법까지 같은 파일로 확인합니다.</description>
          <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>리눅스 &gt;와 &gt;&gt; 차이: echo로 쓴 파일이 사라지는 이유</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-echo-redirection-overwrite-append</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-echo-redirection-overwrite-append</guid>
          <description>echo의 &gt;는 파일을 덮어쓰고 &gt;&gt;는 끝에 추가합니다. 같은 파일로 두 결과를 확인하고, 명령이 실패했는데도 기존 내용이 사라질 수 있는 이유를 알아봅니다.</description>
          <pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
        <item>
          <title>리눅스 절대경로·상대경로: cd가 다른 폴더로 가는 이유와 pwd 확인법</title>
          <link>https://www.taeyoungkim.dev/ko/blog/linux-pwd-cd-absolute-relative-path</link>
          <guid isPermaLink="true">https://www.taeyoungkim.dev/ko/blog/linux-pwd-cd-absolute-relative-path</guid>
          <description>pwd로 현재 위치를 확인하고 cd logs와 cd /logs가 서로 다른 경로를 가리키는 이유를 한 예제로 추적합니다. cd 실패 후 위치와 확인 순서도 정리합니다.</description>
          <pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
          <category>Cloud &amp; Platform Engineering</category>
        </item>
      </channel>
    </rss>