<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>소신의 개발 노트</title><description>직접 겪은 개발 문제와 해결 과정을 기록하는 소신의 개발 블로그</description><link>https://soshin.me/</link><language>ko-kr</language><item><title>Redis와 Valkey 차이부터 AWS 마이그레이션까지</title><link>https://soshin.me/posts/redis-valkey-migration/</link><guid isPermaLink="true">https://soshin.me/posts/redis-valkey-migration/</guid><description>Redis와 Valkey의 차이, RSALv2·SSPLv1·AGPLv3 라이선스, RESP, 단일 노드·클러스터·Global Datastore를 초보자 눈높이에서 설명하고 AWS ElastiCache 전환 경험을 정리했다.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>Redis</category><category>Valkey</category><category>마이그레이션</category></item><item><title>카카오 로그인 SDK SRI 오류: 버전과 해시 맞추기</title><link>https://soshin.me/posts/kakao-sdk-sri-login-failure/</link><guid isPermaLink="true">https://soshin.me/posts/kakao-sdk-sri-login-failure/</guid><description>카카오 JavaScript SDK가 SRI 오류로 실행되지 않을 때 URL 버전과 integrity 해시를 확인하고 로그인 전체 경로를 검증하는 방법.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>카카오 로그인</category><category>SRI</category><category>프론트엔드</category></item><item><title>GitHub OIDC와 ECS Task Role로 AWS 장기 키 없애기</title><link>https://soshin.me/posts/github-oidc-ecs-task-role/</link><guid isPermaLink="true">https://soshin.me/posts/github-oidc-ecs-task-role/</guid><description>GitHub Actions 배포는 OIDC, 실행 중인 컨테이너는 ECS Task Role로 나눠 AWS 장기 Access Key 없이 임시 자격 증명을 쓰는 구조를 설명한다.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>AWS</category><category>OIDC</category><category>ECS</category></item><item><title>Datadog 탐지를 AWS WAF 자동 차단으로 연결하는 방법</title><link>https://soshin.me/posts/datadog-waf-auto-block/</link><guid isPermaLink="true">https://soshin.me/posts/datadog-waf-auto-block/</guid><description>Datadog Security Signal에서 AWS WAF IPSet까지 자동화하면서 원본 IP, 오탐, 동시 수정, 검증과 차단 만료를 함께 설계한 기준을 설명한다.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><category>Datadog</category><category>AWS WAF</category><category>보안 자동화</category></item><item><title>NestJS 테스트 도구 선택: Jest를 코드로 검증했다</title><link>https://soshin.me/posts/nestjs-jest-adoption/</link><guid isPermaLink="true">https://soshin.me/posts/nestjs-jest-adoption/</guid><description>Jest·Jasmine·Mocha의 기능표보다 NestJS TestingModule과 Sequelize 모킹 코드를 먼저 작성해 프로젝트에 맞는 테스트 도구를 고른 과정.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>NestJS</category><category>Jest</category><category>테스트</category></item><item><title>무한 API 호출 막기: 커서 페이지네이션 종료 조건</title><link>https://soshin.me/posts/repeating-api-request-stop-condition/</link><guid isPermaLink="true">https://soshin.me/posts/repeating-api-request-stop-condition/</guid><description>판매 목록 API가 반복 호출된 사례로 커서 페이지네이션의 종료·진행성·중복 제거·안정 정렬을 검증하는 방법을 설명한다.</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><category>API</category><category>페이지네이션</category><category>장애 대응</category></item><item><title>제휴 채널만 열리지 않았다: 인증보다 화면이 먼저 움직인 문제</title><link>https://soshin.me/posts/partner-channel-auth-race/</link><guid isPermaLink="true">https://soshin.me/posts/partner-channel-auth-race/</guid><description>기본 진입은 되는데 제휴 채널만 멈췄다. 기존 Angular·Ionic 흐름에서 인증 데이터보다 화면 이동이 먼저 실행되는 경쟁 상태와 저장소 초기화 실패를 찾아 순서를 고친 과정을 적었다.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>Angular</category><category>Ionic</category><category>인증</category></item><item><title>npm audit CVE 대응: 15개 프로젝트를 나눈 기준</title><link>https://soshin.me/posts/dependency-cve-triage/</link><guid isPermaLink="true">https://soshin.me/posts/dependency-cve-triage/</guid><description>npm audit와 컨테이너 스캔 결과를 읽고 CVE를 패치·상위 의존성 갱신·라이브러리 교체·예외로 나누는 실무 판단법을 정리했다.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>보안</category><category>의존성</category><category>Node.js</category></item><item><title>RDS 보류 유지보수 안전 적용: 11개 작업을 나눈 기준</title><link>https://soshin.me/posts/rds-pending-maintenance-runbook/</link><guid isPermaLink="true">https://soshin.me/posts/rds-pending-maintenance-runbook/</guid><description>RDS 9개 리소스의 보류 유지보수 11개를 개발 Canary, 운영 클러스터와 단일 Writer로 나눠 적용하도록 만든 런북과 검증 기준을 설명한다.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>AWS RDS</category><category>데이터베이스</category><category>운영</category></item><item><title>MySQL 잠금 장애 대응: 15분 롤백과 진단 순서</title><link>https://soshin.me/posts/existing-query-db-lock-rollback/</link><guid isPermaLink="true">https://soshin.me/posts/existing-query-db-lock-rollback/</guid><description>기존 쿼리가 운영 동시성을 만나 만든 MySQL 잠금 경합을 15분 안에 롤백한 경험과 대기·차단 관계를 찾는 진단 순서를 설명한다.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>MySQL</category><category>장애 대응</category><category>데이터베이스</category></item><item><title>Amazon Linux 1 지원 종료: 운영 서버를 안전하게 교체한 방법</title><link>https://soshin.me/posts/amazon-linux-eol-migration/</link><guid isPermaLink="true">https://soshin.me/posts/amazon-linux-eol-migration/</guid><description>지원 종료된 Amazon Linux 1 서버를 발견한 뒤 인플레이스 업그레이드 대신 새 환경을 병행 구축하고, 실제 메시지 처리까지 검증해 전환한 기준을 정리했다.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>AWS</category><category>Amazon Linux</category><category>인프라</category></item><item><title>AWS EBS·RDS 저장 암호화 점검과 전환 우선순위</title><link>https://soshin.me/posts/aws-storage-encryption-audit/</link><guid isPermaLink="true">https://soshin.me/posts/aws-storage-encryption-audit/</guid><description>EBS와 RDS의 암호화 설정뿐 아니라 실제 저장 데이터와 전환 영향을 함께 확인해, 기존 미암호화 자산의 조치 순서를 정하는 방법을 설명한다.</description><pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate><category>AWS</category><category>암호화</category><category>컴플라이언스</category></item><item><title>BPFDoor 오탐 확인법: BPF 필터와 8000 포트 추적</title><link>https://soshin.me/posts/bpfdoor-false-positive-investigation/</link><guid isPermaLink="true">https://soshin.me/posts/bpfdoor-false-positive-investigation/</guid><description>BPFDoor 점검에서 나온 BPF 필터와 8000 포트 경고를 프로세스·실행 파일·소켓 소유자까지 따라가 실제 침해와 정상 동작을 구분한 방법을 설명한다.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>Linux</category><category>보안</category><category>장애 분석</category></item><item><title>개인정보 암호화 뒤 MySQL 장애: 검색 인덱스 누락</title><link>https://soshin.me/posts/encrypted-search-index-outage/</link><guid isPermaLink="true">https://soshin.me/posts/encrypted-search-index-outage/</guid><description>암호화 전환 뒤 검색용 해시 컬럼의 인덱스 누락으로 MySQL이 멈춘 원인, 1시간 30분 복구와 실행 계획 검증법을 설명한다.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><category>MySQL</category><category>장애 대응</category><category>데이터베이스</category><category>개인정보</category></item><item><title>RDB·Firestore 동기화: 읽기 모델과 폴백 설계</title><link>https://soshin.me/posts/firestore-read-model-sync/</link><guid isPermaLink="true">https://soshin.me/posts/firestore-read-model-sync/</guid><description>반복 조인을 줄이면서 RDB를 원본으로 유지하는 Firestore 읽기 모델, 체크포인트·멱등 재처리·기존 API 폴백을 설명한다.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>Firestore</category><category>데이터 동기화</category><category>아키텍처</category></item><item><title>Sharp ‘Input Buffer is empty’ 1,554건의 원인</title><link>https://soshin.me/posts/lambda-edge-sharp-empty-buffer/</link><guid isPermaLink="true">https://soshin.me/posts/lambda-edge-sharp-empty-buffer/</guid><description>이미지 프록시에서 하루 1,554건 발생한 Sharp 오류를 빈 S3 원본과 접근 거부로 분리했다. 입력 길이 검사, 최소 권한과 배포 버전 확인으로 수정했다.</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><category>AWS</category><category>Lambda@Edge</category><category>이미지</category></item><item><title>n8n 웹훅 인증: Header Auth와 HMAC 선택 기준</title><link>https://soshin.me/posts/n8n-webhook-authentication/</link><guid isPermaLink="true">https://soshin.me/posts/n8n-webhook-authentication/</guid><description>비공개 IP 뒤의 n8n 웹훅도 인증이 필요한 이유와 Header Auth, JWT, HMAC·타임스탬프·nonce를 상황에 맞게 고르는 기준을 설명한다.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><category>n8n</category><category>웹훅</category><category>보안</category></item><item><title>Node.js, NestJS, Sequelize 업그레이드를 나눈 순서</title><link>https://soshin.me/posts/node-nest-sequelize-major-upgrade/</link><guid isPermaLink="true">https://soshin.me/posts/node-nest-sequelize-major-upgrade/</guid><description>Node.js 12→20, NestJS 7→10, Sequelize 5→6을 155개 파일에 걸쳐 바꾸고 설치·빌드·테스트·주요 API를 단계마다 검증한 기록.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate><category>Node.js</category><category>NestJS</category><category>Sequelize</category></item><item><title>node-redis 업그레이드: SADD 오류와 안전한 이전법</title><link>https://soshin.me/posts/node-redis-set-command-migration/</link><guid isPermaLink="true">https://soshin.me/posts/node-redis-set-command-migration/</guid><description>SADD·SRANDMEMBER 호출 계약이 달라진 장애를 15분 안에 롤백한 경험과 고수준 API·반환값·연결 수명주기 검증법을 설명한다.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate><category>Redis</category><category>Node.js</category><category>장애 대응</category><category>라이브러리 업그레이드</category></item><item><title>검색 가능한 개인정보 암호화: AES-GCM과 HMAC</title><link>https://soshin.me/posts/searchable-personal-data-encryption/</link><guid isPermaLink="true">https://soshin.me/posts/searchable-personal-data-encryption/</guid><description>전화번호 같은 개인정보를 AES-256-GCM 암호문과 HMAC 검색 토큰으로 나누고 키 버전·정규화·배치 이관을 안전하게 설계하는 법을 설명한다.</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate><category>Node.js</category><category>암호화</category><category>개인정보</category><category>백엔드</category></item><item><title>브라우저 이미지 압축: 업로드 전에 160MB를 2.49MB로 줄였다</title><link>https://soshin.me/posts/browser-image-compression/</link><guid isPermaLink="true">https://soshin.me/posts/browser-image-compression/</guid><description>이미지 네 장의 160.04MB를 브라우저에서 2.49MB로 줄이고, 픽셀 축소·WebP 변환·원본 보존 여부를 결정한 과정.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate><category>성능</category><category>프론트엔드</category><category>이미지</category></item><item><title>CloudWatch 누락 데이터 알람: TreatMissingData 선택법</title><link>https://soshin.me/posts/cloudwatch-alarm-missing-data/</link><guid isPermaLink="true">https://soshin.me/posts/cloudwatch-alarm-missing-data/</guid><description>CloudWatch 알람 9종을 점검하며 측정값 0과 데이터 공백을 구분하고, 지표 성격에 맞는 TreatMissingData 정책과 검증 방법을 정리했다.</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate><category>AWS</category><category>운영</category><category>관측성</category></item><item><title>CloudWatch Logs 보존기간 정하기: 92개 로그 그룹 점검</title><link>https://soshin.me/posts/cloudwatch-log-retention-policy/</link><guid isPermaLink="true">https://soshin.me/posts/cloudwatch-log-retention-policy/</guid><description>CloudWatch 로그 그룹 92개의 용도와 규정상 필요 기간을 확인하고, 무기한 보관을 유한한 보존정책으로 바꾼 기준과 검증 방법을 설명한다.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><category>AWS</category><category>운영</category><category>보안</category></item><item><title>PM2 재시작 루프로 CPU 100%가 된 원인과 해결</title><link>https://soshin.me/posts/pm2-fork-exec-storm/</link><guid isPermaLink="true">https://soshin.me/posts/pm2-fork-exec-storm/</guid><description>top에서 잡히지 않던 CPU 100% 문제를 execsnoop으로 추적해 PM2 재시작 루프와 npm·nvm 설정 충돌을 찾고 해결한 과정.</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate><category>Node.js</category><category>운영</category><category>장애 대응</category></item><item><title>백그라운드 큐 배치: 100건씩 나눠 복구 가능하게</title><link>https://soshin.me/posts/recoverable-queue-batching/</link><guid isPermaLink="true">https://soshin.me/posts/recoverable-queue-batching/</guid><description>전체 대상을 한 번에 처리하던 작업을 100건 단위로 나누고 claim·lease·멱등성·재시도로 중단 뒤에도 이어 가는 설계를 설명한다.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate><category>백엔드</category><category>운영</category><category>아키텍처</category></item><item><title>Docker 빌드 재현성: lockfile과 npm ci가 필요한 이유</title><link>https://soshin.me/posts/reproducible-node-build-npm-ci/</link><guid isPermaLink="true">https://soshin.me/posts/reproducible-node-build-npm-ci/</guid><description>Docker 빌드가 매번 다른 npm 의존성을 설치해 장애를 만든 원인과 package-lock.json, npm ci로 검증한 조합을 재현하는 방법.</description><pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate><category>Node.js</category><category>CI/CD</category><category>운영</category></item><item><title>S3 Presigned URL 직접 업로드: 보안과 검증 기준</title><link>https://soshin.me/posts/s3-presigned-upload-security/</link><guid isPermaLink="true">https://soshin.me/posts/s3-presigned-upload-security/</guid><description>브라우저가 S3로 직접 업로드하는 구조와 5분짜리 Presigned PUT URL의 권한, 재사용, 덮어쓰기와 파일 검증 경계를 설명한다.</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><category>AWS</category><category>보안</category><category>아키텍처</category></item><item><title>S3 업로드 보안: 격리·검사·게시 파이프라인</title><link>https://soshin.me/posts/s3-upload-verification-pipeline/</link><guid isPermaLink="true">https://soshin.me/posts/s3-upload-verification-pipeline/</guid><description>S3 직접 업로드 파일을 격리하고 정확한 객체 버전·체크섬·파일 형식을 검사한 뒤 통과한 파일만 게시하는 구조를 설명한다.</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate><category>AWS</category><category>보안</category><category>아키텍처</category></item><item><title>AWS 보안그룹 공개 규칙을 안전하게 줄이는 순서</title><link>https://soshin.me/posts/security-group-add-before-remove/</link><guid isPermaLink="true">https://soshin.me/posts/security-group-add-before-remove/</guid><description>VPC Flow Logs로 실제 통신을 확인하고 좁은 인바운드 규칙을 먼저 추가한 뒤 0.0.0.0/0 공개 규칙을 제거하는 방법을 설명한다.</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate><category>AWS</category><category>보안</category><category>네트워크</category></item><item><title>29초 통계 API 개선: 병렬 쿼리와 날짜 범위 조건</title><link>https://soshin.me/posts/slow-query-parallel-range/</link><guid isPermaLink="true">https://soshin.me/posts/slow-query-parallel-range/</guid><description>29초 걸린 관리자 통계에서 독립 쿼리의 직렬 대기와 날짜 컬럼 함수 조건을 찾아 Promise.all과 반개구간 범위로 바꾼 과정을 설명한다.</description><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate><category>성능</category><category>데이터베이스</category><category>백엔드</category></item><item><title>SSE egress 비용 분석: 트래픽 4배 원인 찾기</title><link>https://soshin.me/posts/sse-egress-cost-analysis/</link><guid isPermaLink="true">https://soshin.me/posts/sse-egress-cost-analysis/</guid><description>요청 수는 약 25% 늘었는데 egress는 4배가 된 사례로 SSE 이벤트 크기·빈도, heartbeat와 재연결 비용을 계산하는 법을 설명한다.</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate><category>SSE</category><category>성능</category><category>비용</category></item><item><title>백엔드 개발자가 블로그에 Astro를 선택한 이유</title><link>https://soshin.me/posts/astro-blog-start/</link><guid isPermaLink="true">https://soshin.me/posts/astro-blog-start/</guid><description>Angular 경험이 있는 백엔드 개발자가 개인 기술 블로그에 Astro를 선택한 기준과 정적 HTML, Content Collections, 아일랜드 구조를 설명한다.</description><pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate><category>Astro</category><category>블로그</category><category>아키텍처</category></item><item><title>재현 가능한 장애 기록: 판단 순서를 남기는 법</title><link>https://soshin.me/posts/reproducible-debugging-note/</link><guid isPermaLink="true">https://soshin.me/posts/reproducible-debugging-note/</guid><description>장애 메모에 명령만 복사하지 않고 관측, 가설, 분리 실험, 수정과 검증을 연결해 다음 조사에서도 재사용할 수 있게 만드는 방법.</description><pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate><category>디버깅</category><category>글쓰기</category><category>생산성</category></item><item><title>AdSense 등록 전 Astro 블로그에서 준비할 것</title><link>https://soshin.me/posts/adsense-performance-basics/</link><guid isPermaLink="true">https://soshin.me/posts/adsense-performance-basics/</guid><description>AdSense 승인 전에 광고 스위치, CLS 방지 공간, 공통 스크립트와 동의 절차를 어떻게 준비했는지 실제 Astro 구성으로 설명한다.</description><pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate><category>AdSense</category><category>웹 성능</category><category>SEO</category></item></channel></rss>