전체 글 썸네일형 리스트형 EF Core AsSplitQuery 사용법: 카테시안 곱 줄이기 EF Core에서 컬렉션 Include를 두 개 이상 걸면 기본 설정에서는 SQL이 LEFT JOIN 하나로 합쳐져 행 수가 곱셈으로 늘어납니다. AsSplitQuery()를 붙이면 컬렉션마다 SQL을 따로 보내 중복 행을 줄일 수 있습니다.설정 없이 이런 쿼리를 실행하면 EF Core는 MultipleCollectionIncludeWarning 경고를 남깁니다. 이 글에서는 경고가 뜨는 조건, 카테시안 곱이 생기는 원리, 분할 쿼리를 쓰는 세 가지 방법, 페이징 주의점을 정리합니다.경고는 어떤 상황에서 뜨나요?Include로 불러오는 컬렉션이 두 개 이상이고, 쿼리나 컨텍스트에 쿼리 분할 방식(QuerySplittingBehavior)을 정하지 않았을 때 뜹니다. 로그에는 아래처럼 찍힙니다.warn: .. 더보기 React Too many re-renders 오류 해결: 렌더 중 setState 찾기 React의 Too many re-renders 오류는 컴포넌트가 렌더링하는 도중 setState를 조건 없이 호출할 때 발생합니다. 가장 흔한 원인은 onClick에 함수 대신 호출 결과를 넘기는 실수입니다. 이 글은 이 오류와 비슷한 경고를 구분하고, 호출 위치를 찾는 순서와 고치는 코드를 정리합니다.이 글의 예제는 함수 컴포넌트 기준이며, 설명은 React 공식 문서와 릴리스 노트를 근거로 했습니다.Too many re-renders는 무엇을 뜻하나요?React 공식 문서는 이 오류를 "Too many re-renders. React limits the number of renders to prevent an infinite loop." 메시지로 소개합니다. 뜻은 렌더링이 끝없이 반복되지 않도록 R.. 더보기 C# Span async 오류 CS4012 해결: Memory<T>로 바꾸는 법 왜 async 메서드에서는 Span를 쓰기 어렵나요?C# async 메서드에서 Span를 매개변수로 받거나 await 너머로 들고 가면 컴파일러가 CS4012나 CS4007 오류를 냅니다. 해결법은 버퍼를 Memory로 들고 가다가, await가 끝난 뒤에만 .Span을 꺼내 쓰는 것입니다.Span는 스택에만 놓이는 ref struct입니다. async 메서드는 await를 거칠 때 지역 값을 힙의 상태 머신에 옮겨 두기 때문에, 스택 전용 값은 그 과정에 담을 수 없습니다.Microsoft 문서도 Span가 클래스 필드가 될 수 없고, 박싱되거나 await와 yield 경계를 넘길 수 없다고 설명합니다. 비동기 I/O 버퍼에 Memory가 필요한 이유가 여기에 있습니다.헷갈리기 쉬운 점은 실제로 바로 .. 더보기 홈 NAS 고르는 법: 도커 돌릴 때 RAM과 CPU부터 확인 홈 NAS 고르는 법에서 도커 컨테이너를 돌릴 계획이라면 CPU 아키텍처, RAM 용량, AVX 지원 여부를 먼저 확인해야 합니다. 기본 RAM이 2GB인 입문 모델은 컨테이너 몇 개만 올려도 메모리가 빠듯해질 수 있어서, 구매 전에 최대 용량과 확장 방식을 봐야 합니다.이 글은 특정 제품을 추천하지 않고 확인 순서를 정리합니다. 스펙은 시놀로지 공식 제품 페이지를 2026년 11월 4일에 확인한 값만 썼고, 가격은 시기에 따라 크게 바뀌어서 다루지 않았습니다.도커용 NAS를 고를 때 무엇부터 봐야 할까?가장 먼저 볼 것은 CPU 아키텍처입니다. x86(Intel, AMD) 기기는 대부분의 도커 이미지를 그대로 쓸 수 있지만, ARM 기기에서는 이미지가 arm64 빌드를 제공해야 실행됩니다. 국내 NAS.. 더보기 EF Core AsNoTracking 사용법: 조회는 빠르게, 추적 오류는 피하기 EF Core의 AsNoTracking은 조회 결과를 변경 추적기(Change Tracker)에 올리지 않게 해서, 읽기 전용 쿼리를 가볍게 만드는 옵션입니다. 대신 가져온 객체를 고쳐도 SaveChanges가 저장하지 않으니, 저장할 객체에는 쓰면 안 됩니다.이 글은 AsNoTracking이 끄는 것과 남기는 것, 쓰면 좋은 자리, "cannot be tracked" 오류를 고치는 방법을 EF Core 공식 문서 기준으로 정리합니다.AsNoTracking은 정확히 무엇을 끄나요?AsNoTracking을 붙인 쿼리는 결과 엔티티를 변경 추적기에 등록하지 않습니다. 그래서 결과를 수정해도 변경을 감지하지 않고, SaveChanges는 그 변경을 저장하지 않습니다.기본 쿼리는 반대로 동작합니다. 결과 엔티티.. 더보기 React Invalid hook call 오류 해결: 원인 3가지와 확인 순서 React에서 Invalid hook call 오류는 훅(useState, useEffect 등)을 컴포넌트 렌더링 밖에서 호출했거나, 한 앱에 react 패키지가 두 벌 올라와 있을 때 나타납니다. 원인은 크게 훅 규칙 위반, react와 react-dom 버전 불일치, 중복 설치 세 가지이며 아래 순서대로 확인하면 어디에 해당하는지 빠르게 좁힐 수 있습니다.Invalid hook call 오류 메시지는 어떻게 보이나요?개발 모드에서는 콘솔에 Warning 형태로 다음 문장이 뜹니다. 프로덕션 빌드에서는 압축된 Minified React error #321 형태로 보이며, React 공식 문서에 전체 문장이 정리되어 있습니다.Warning: Invalid hook call. Hooks can only .. 더보기 C# TimeProvider 사용법: 테스트에서 시간 고정하기 (.NET 8) C# TimeProvider는 .NET 8부터 기본으로 포함된 시간 추상화 클래스입니다. 현재 시각을 DateTime.UtcNow 대신 주입받아 쓰면 테스트에서 시각을 고정하거나 앞으로 돌릴 수 있습니다. 이 글은 FakeTimeProvider로 만료일과 시간대 경계를 테스트하는 방법과, 실무에서 자주 하는 실수 세 가지를 정리합니다.C# TimeProvider란 무엇인가요?TimeProvider는 현재 시각을 가져오는 방법을 감싼 추상 클래스이며, 시각을 DateTimeOffset으로 돌려줍니다. 공식 문서에 따르면 .NET 8 이상에서는 프레임워크에 포함되어 있고, .NET 5~7이나 .NET Framework에서는 Microsoft.Bcl.TimeProvider NuGet 패키지를 추가해야 합니다... 더보기 React hydration 오류 해결: 418·425 원인과 수정법 React hydration 오류는 서버가 미리 만든 HTML과 브라우저가 처음 렌더링한 결과가 서로 다를 때 발생합니다. 원인은 대부분 렌더링 중 Date.now()나 Math.random() 호출, window와 localStorage 같은 브라우저 전용 값, 잘못된 태그 중첩 중 하나이며, 값을 마운트 이후로 미루거나 서버와 같은 초기값을 주면 고칠 수 있습니다.React hydration 오류란 무엇인가요?hydration은 서버에서 만든 HTML에 React가 이벤트 핸들러를 붙여 살아 있는 앱으로 만드는 과정입니다. React 공식 문서의 hydrateRoot 페이지는 서버 렌더 결과와 클라이언트의 첫 렌더 결과가 같아야 한다고 설명하며, 이 둘이 어긋나는 것을 hydration 오류(mism.. 더보기 이전 1 2 3 4 ··· 77 다음