💡 오늘의 개발상식
비밀번호 해싱과 솔트의 판단 기준
해싱과 솔트는 대체 관계가 아니다. 해싱은 복원 불가능한 저장 형식이고, 솔트는 같은 비밀번호라도 해시가 달라지게 만드는 입력값이다. 판단 기준은 하나 — 솔트가 해시 입력에 포함되는가. 솔트를 별도 컬럼에 저장하거나 해시 이후에 붙이면 크리덴셜 재사용 공격에 그대로 노출된다.
개발하며 겪은 판단을 적어요
개발 기록
도입할까 말까 고민했던 기술, 막상 쓰고 보니 마주친 문제들. 까먹지 않으려고 적어두는 곳이에요.
💡 오늘의 개발상식
해싱과 솔트는 대체 관계가 아니다. 해싱은 복원 불가능한 저장 형식이고, 솔트는 같은 비밀번호라도 해시가 달라지게 만드는 입력값이다. 판단 기준은 하나 — 솔트가 해시 입력에 포함되는가. 솔트를 별도 컬럼에 저장하거나 해시 이후에 붙이면 크리덴셜 재사용 공격에 그대로 노출된다.
eslintrc에서 flat config로 전환할 때 가장 많이 무너지는 지점은 규칙이 아니라 플러그인 호환성과 설정 병합 순서다. 문자열 기반 extends가 사라지고 객체 배열로 바뀌면서 플러그인 등록 방식, ignores 처리, 에디터 연동이 모두 달라진다. 이 글은 실제 마이그레이션에서 조용히 실패하는 지점을 짚고, 무엇을 먼저 옮기고 무엇을 버려야 하는지 판단 기준을 제시한다.
RAG 검색 품질이 오르지 않을 때 임베딩 모델이나 벡터 DB를 먼저 의심하기 쉽지만, 정작 원인은 문서를 기계적으로 잘라 문맥을 조각내는 청크 분할에 있다. 고정 길이 분할, 문장 중간 절단, 표와 제목 분리 같은 흔한 실수가 재현율을 어떻게 망치는지 사례와 함께 짚고, 청크 크기와 오버랩을 문서 구조에 맞게 조정하는 방법, 검색 품질을 측정하는 실용 지표까지 정리한다.
Next.js App Router에서 'use client' 한 줄이 서버·클라이언트 영역을 가르면 번들 크기, 데이터 페칭, 상태 관리 전략이 전부 흔들린다. 경계를 잘못 그으면 번들 비대화와 중복 페칭이 뒤늦게 한꺼번에 터진다. 이 메모는 계층별 책임과 데이터 소유권을 기준으로 경계를 다시 그리는 판단 원칙과, 이미 잘못 그어진 경계를 리팩터링하는 우선순위를 정리한다.
TypeScript strict 계열 옵션을 한 번에 켜면 수천 개의 타입 에러가 쏟아져 작업이 멈추기 십상이다. 실제 프로젝트 사례를 바탕으로 옵션별 변경 난이도와 영향 범위를 비교해 어떤 순서로 켜는 것이 안전한지, 어디까지 자동으로 고치고 어디를 수동으로 봐야 하는지 단계적 로드맵으로 정리했다.
작은 서비스에서 DB 폴링으로 작업을 처리하다 보면 스루풋이 급격히 떨어지고 레이턴시가 늘어나는 신호가 나옵니다. 이 글에서는 폴링 기반 처리가 감당해야 하는 한도를 분석하고, 큐 시스템 도입이 필요한 시점의 구체적 판단 기준을 제시합니다. 단순히 '트래픽이 늘었다'는 증상이 아니라 시스템 자체의 포화 상태를 어떻게 인지하고 대응할지, 도입 후 새겨야 하는 운영 체크포인트까지 함께 다룹니다.
웹훅 수신부는 외부의 불신을 전제로 설계해야 한다. 재전송과 처리 지연, 심지어 위조 시도까지 뒤따르는 불안정한 요청을 믿으면 안 되기에, 시그니처 검증과 멱등 처리, 재전송 ID 추적, 지연 시 큐잉 판단 등 수신부 설계에서 빼먹기 쉬운 요소를 모두 챙겨야 비로소 안정적 수신이 시작된다. 특히 재전송은 멱등키 없이 또다시 도착해도 중복 처리되지 않도록, 지연이 길어지면 즉시 큐에 넣어 처리를 미루어야 한다는 점을 잊지 말자
DevInsight Digest
과장된 알림 대신 발행한 글 전체를 RSS로 제공합니다.
AI부터 개발 도구까지, 지금 읽고 싶은 흐름을 카테고리별로 묶었습니다.
LLM, AI 도구, 자동화 흐름과 제품 업데이트를 따라갑니다.
React, Next.js, 브라우저 생태계와 UI 개발 흐름을 다룹니다.
API, 서버, 데이터 흐름과 운영에서 드러나는 변화를 정리합니다.
배포, 관측, 자동화, 인프라 운영 이슈를 실무 관점으로 봅니다.
보안 사고, 취약점, 인증과 권한 설계 흐름을 정리합니다.
데이터 플랫폼, 분석, 검색, 파이프라인 이슈를 다룹니다.
개발 도구, 생산성 앱, 오픈소스 도구 변화를 살펴봅니다.