본문 바로가기

분류 전체보기116

Next.js 보안 업데이트 경험기 (npm audit부터 프레임워크 업그레이드까지) 최근 들어 프론트엔드 생태계에서도 보안 이슈가 점점 더 자주 언급되고 있습니다. 단순히 백엔드나 인프라 영역의 문제가 아니라, 우리가 사용하는 패키지, 프레임워크 하나가 전체 서비스의 취약점이 될 수 있다는 점에서 체감이 더 크게 다가옵니다. 이에 대응하고자 제가 담당한 프로젝트에서 진행한 대처는 생각보다 단순한데요, 오랜만에 쓰는 이 글은 이 과정을 실제 프로젝트에 적용하며 느낀점입니다. 의존성 취약점 점검 → 자동/수동 패치 → Next.js 버전 업그레이드 1. npm audit로 시작하는 현재 상태 점검가장 먼저 실행한 것은 npm audit입니다.npm audit 이 명령어는 현재 프로젝트의 의존성 트리를 기준으로 알려진 취약점을 스캔합니다.생각보다 다양한 레벨의 취약점이 발견됩니다.low: 영.. 2026. 3. 27.
Vercel 배포 환경에서 Prisma + Supabase DB 연결 오류 해결기 (POSTGRES_PRISMA_URL 미사용 & 시드 데이터 누락 문제) Vercel에 배포된 서비스에서 Q&A 조회가 되지 않는 문제가 발생했다.로컬 환경에서는 정상 동작했지만, 배포 환경에서는 데이터가 없는 것처럼 보였다.조사 결과, 문제는 크게 두 가지였다.Prisma Client가 POSTGRES_PRISMA_URL을 사용하지 않음배포 환경에서 DB 마이그레이션 / 시드가 실행되지 않았을 가능성뭐가 문제일까?1️⃣ Prisma 연결 URL 문제Supabase를 사용할 경우, Prisma는 pgBouncer 전용 연결 문자열을 사용해야 한다.❌ DATABASE_URL (5432 포트)✅ POSTGRES_PRISMA_URL (6543 포트 + pgbouncer 옵션)하지만 기존 lib/prisma.t.. 2025. 12. 30.
자바스크립트에서 .map() 과 .forEach()는 뭐가 다를까? 차이점 설명 배열을 돌 때 우리는 습관처럼 .map()이나 .forEach()를 씁니다. 그런데 이 둘을 섞어 쓰다 보면 “이건 새 배열이 나와야 하는데 왜 undefined지?”, “여기선 return 해도 왜 안 모이지?” 같은 일이 생기죠.이 글에서는 두 메서드의 목적, 반환값, 언제 쓰는 게 맞는지, 그리고 비동기/중단 불가 이슈까지 한 번에 정리해봤습니다. 1. 한 줄 비교.map(): “이 배열을 변환해서 새 배열을 만들어줘.”.forEach(): “이 배열을 그냥 돌면서 이 함수 좀 실행해.”둘 다 “배열을 순회한다”는 점은 같지만, 어떤 결과를 만들어내느냐가 핵심 차이입니다. 2. 기본 형태array.forEach((item, index, arr) => { // 실행만 함});const newArra.. 2025. 11. 12.
SQL Server에서 임시 테이블(#TempTable) 제대로 쓰는 법 개발을 하다 보면 쿼리가 너무 복잡해서 “이걸 한 번에 처리할 수 있을까…” 싶은 순간이 옵니다.그럴 때마다 중간 결과를 잠깐 담아둘 수 있는 임시 테이블(Temporary Table) 이 정말 유용합니다. 임시 테이블은 말 그대로 잠깐 쓰고 사라지는 테이블이에요.CREATE TABLE로 만드는 일반 테이블처럼 구조를 만들지만, 세션이 끝나면 자동으로 삭제됩니다. 즉, 임시테이블이란“ 쿼리를 돌리는 동안만 잠깐 필요한 데이터” 를 담는 데 쓰는 테이블이죠. 임시테이블 종류로컬 임시 테이블#테이블명현재 세션 안에서만 접근 가능보통 우리가 쓰는 임시 테이블글로벌 임시 테이블##테이블명서버 전체에서 접근 가능여러 세션에서 공유 가능 대부분은 # 하나짜리 로컬 임시 테이블만 씁니다.세션이 닫히면 자동으로 없어.. 2025. 10. 14.
정적 SQL vs 동적 SQL, 언제 어떻게 써야 할까? SQL을 사용하다 보면 정적 SQL(Static SQL)과 동적 SQL(Dynamic SQL) 중 무엇을 써야 할지 고민할 때가 있습니다. 단순히 "문자열 붙이는 쿼리"냐 "파라미터 바인딩"이냐의 차이처럼 보이지만, 성능과 보안, 유지보수성까지 크게 영향을 미칩니다. 오늘은 두 방식을 비교하고, 각각 언제 쓰는 게 좋은지 정리해보겠습니다. 1. 정적 SQL이란?정적 SQL은 쿼리 구조가 고정되어 있고, 실행 시점에 값만 바인딩해서 사용하는 방식입니다.CREATE PROCEDURE spStudentList @AdmissionYear CHAR(4), @Mogib VARCHAR(10)ASBEGIN SELECT * FROM tbEvalMaster_Document WHERE Admiss.. 2025. 9. 25.
Azure에서 파일 저장하려면? Blob Storage 개념 정리 Azure Blob Storage에서 Blob(Binary Large Object)은 대용량의 비정형 데이터(이미지, 동영상, 로그 파일 등)를 저장하는 단위를 의미💡 Azure Blob Storage 개념Azure에서 Blob Storage는 클라우드에 파일을 저장할 수 있는 서비스. 쉽게 말하면, AWS의 S3와 비슷한 개념이고, 네트워크를 통해 접근할 수 있는 파일 저장소이다📌 Blob의 역할과 특징비정형 데이터 저장Blob은 텍스트, 이미지, 영상, 로그, 백업 파일 등 다양한 파일 저장 가능.데이터베이스처럼 구조화된 데이터(SQL)보다는 파일 기반의 데이터를 저장하는 용도.클라우드에서 데이터 액세스Azure에서 제공하는 URL을 통해 웹/앱에서 바로 접근 가능.HTTP/HTTPS 프로토콜을 .. 2025. 3. 5.