목록분류 전체보기 (154)
개발자공부일기

Windows에서 WSL2를 사용하다 보면, 메모리나 CPU 사용량이 과도하게 올라가서 컴퓨터 전체 성능에 영향을 줄 때가 있습니다.이럴 때 .wslconfig 파일을 사용하면 WSL2 전체의 자원 사용량을 직접 제어할 수 있습니다.이번 글에서는 .wslconfig 파일 생성부터 적용 확인까지 과정을 정리해 보겠습니다.1. .wslconfig 파일이란?위치: C:\Users\\.wslconfig역할: WSL2 전역(Global) 설정 파일특징: Ubuntu, Debian 같은 모든 WSL2 배포판과 Docker Desktop까지 설정이 한 번에 적용됩니다.즉, 한 번 설정하면 내 컴퓨터에서 실행되는 WSL2 전체 환경에 공통으로 반영됩니다.2. .wslconfig 파일 만들기메모장 실행아래와 같은 내용을..
최근 프로젝트에서 Middleware를 통해 인증 로직을 추가하던 중, 문제가 발생했다.JWT 토큰을 검증하기 위해 jsonwebtoken 라이브러리를 사용했는데, 실행 시 "Edge 환경에서는 지원되지 않는다"는 에러가 나온 것이다.분명히 환경을 바꾼 적이 없는데, 왜 Edge 환경에서 실행되는 걸까?이번 글에서는 Next.js에서 Node.js와 Edge 환경이 각각 어디서 실행되고, 어떤 차이가 있는지를 정리해본다.Next.js 안의 실행 영역Next.js 프로젝트는 단순히 서버에서만 돌아가는 게 아니다. 내부적으로 여러 실행 영역이 나뉘어 있고, 각각의 영역이 다른 런타임을 사용한다. 크게 네 가지로 나눌 수 있다.브라우저(Client)사용자의 PC나 스마트폰에서 실행되는 부분React 클라이언..
https://www.acmicpc.net/problem/11003문제 요약길이 N의 수열이 주어진다.각 위치 i에서, 그 위치를 포함한 직전 L개의 숫자 중 최솟값을 구해라.출력은 수열의 처음부터 끝까지 각 위치에서의 최솟값을 공백으로 구분하여 출력.보니까 슬라이딩윈도우를 사용하는건 맞다. 근데 최솟값을 찾아야하니 정렬을 해야할건데 전부 정렬을 했다간 n의 크기가 최대 5,000,000이라 시간초과가 무조건 날거같았다.그래서 찾아보니까 deque 라는걸 사용한다더라.deque를 사용해서 정렬 비슷한 효과를 낼 수 있는데, 아래 2번에서 설명하겠다. 1. 인덱스와 값을 저장하기 위한 pair처음엔 그냥 숫자만 넣으려 했는데,슬라이딩 윈도우의 범위가 현재 인덱스 기준 i - L + 1부터 i까지이기 때문에..
Next.js의 App Router를 기반으로 음성 기반 AI 면접 기능을 만들던 중, 예상치 못한 충돌을 겪었다.Whisper(Gemini API)를 통해 음성파일을 텍스트로 전사하고, 그 결과를 Prisma로 DB에 저장하는 흐름이었다.한 줄로 정리하면 “음성 → 텍스트 → DB 저장”이라는 단순한 로직이었는데, 실행 환경(runtime) 문제로 인해 전체 구조를 바꾸게 되었다.만들고자 했던 구조사용자가 마이크로 음성 입력업로드된 음성 파일을 Whisper API로 전송해 텍스트로 변환전사된 텍스트를 Prisma로 DB에 저장처음엔 이걸 하나의 API에서 처리하려고 했다.문제 1: Edge Runtime에서 Prisma 사용 불가Whisper 처리를 위해 req.formData()를 사용해야 했고, ..
Next.js 기반으로 개발 중인 프로젝트에서 로컬 서버로 테스트하던 중, 페이지 로딩 속도가 비정상적으로 느리다는 문제가 발생했습니다.처음엔 API 응답이나 이미지 때문인가 했지만, 알고보니 개발자 모드와 프로덕션 모드가 따로 있었고 개발자 모드는 원래 느리다고 합니다. 그래서 프로덕션 모드로 테스트하려고 npx next build && npx next start를 시도하는 순간...Could not find a production build in the '.next' directory. 난 분명 빌드를 했는데 왜 없는가?ESLint 에러로 인해 빌드 자체가 실패하고 있었음빌드를 다시 실행하면서 보니, 화면에는 수백 줄에 달하는 ESLint 에러가 쏟아졌습니다.그냥 너 코드 별로야 라고 경고하는줄만 알..
오늘 codex라는 기능을 써봤다.우리 깃허브 브랜치에 접근해 읽을 수 있다. 이 친구한테 원하는 코드 요구사항을 주면 작성하는데, 혼자서 이게 작동하는 코드인지 테스트도 하고 계속 코드를 개선함.코드 만들어달라하고 뽑아주면 pr만들기로 codex의 코드를 내 브랜치에 머지할 수 있음. 뭔가 프로젝트를 진행하는 사람이 하나 더 늘어나는 느낌이었다.그리고 여러개의 작업을 병렬적으로 수행할 수 있어서 여러명이 늘어나는 느낌도 준다. 혼자 사이드 프로젝트를 해도 팀프로젝트를 하는듯한 느낌.. 되게 신기하고 편하면서도 무섭다.점점 코드 문법이라는게 어떻게 굴러가는지 대충만 알면(코드를 읽을줄 안다면) codex와 프로젝트를 다 할 수 있을것같다. 그래도 아직 사람자체를 대체하기엔 신뢰성이 부족하다고들 한다. ..

https://www.acmicpc.net/problem/2018어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한다. 이때, 사용하는 자연수는 N이하여야 한다.예를 들어, 15를 나타내는 방법은 15, 7+8, 4+5+6, 1+2+3+4+5의 4가지가 있다. 반면에 10을 나타내는 방법은 10, 1+2+3+4의 2가지가 있다.N을 입력받아 가지수를 출력하는 프로그램을 작성하시오. 라는 간단한? 문제이다. 처음엔 그냥 1부터 갯수를 늘려가며 경우의 수를 다 구해볼까 했는데 10,000,000이 최댓값인걸 보니 당연히 안되겠다 싶었다. 그래서 책을..
문제 상황Next.js 15 프로젝트에서 동적 API 라우트(/api/boards/[postId])를 구현하던 중 다음과 같은 오류가 발생했다.Error: Route "/api/boards/[postId]" used `params.postId`. `params` should be awaited before using its properties. 아래의 API 라우트 핸들러에서 오류가 발생했습니다.export async function GET( req: NextRequest, context: { params: { postId: string } }) { const postId = context.params.postId; // 오류 발생 const post = await prisma.post.findU..