본문 바로가기

분류 전체보기

(124)
Laravel 운영 서버에서 env() 함수가 null을 반환하는 이유 문제 상황Laravel 프로젝트를 운영 서버에 배포한 후, 이상한 현상을 경험했습니다.// Blade 파일분명 .env 파일에 FILESERVER_HOST 값이 설정되어 있는데, 화면에서는 빈 문자열이 출력되었습니다. 더 이상한 건 DB 연결은 정상적으로 작동한다는 점이었죠.tinker로 확인해보니:$ php artisan tinker> env('FILESERVER_HOST')= null> env('DB_HOST')= null> env('APP_NAME')= null모든 환경 변수가 null로 반환되었습니다. 하지만 애플리케이션은 정상적으로 데이터베이스에 접속하고 있었습니다. 도대체 무슨 일이 벌어진 걸까요?원인: config:cache의 동작 원리문제의 원인은 php artisan config:cach..
MySQL 타임존 SYSTEM 설정과 UTC 저장 문제 해결하기 MySQL 쓰다 보면 SELECT @@global.time_zone, @@session.time_zone; 결과가 SYSTEM으로 나오는데, 막상 DB에 저장된 TIMESTAMP 값을 보면 UTC 기준으로 들어가 있는 당황스러운 상황, 겪어보셨나요?오늘은 이 문제의 원인과 해결 방법을 차근차근 정리해볼게요!먼저 알아야 할 것: TIMESTAMP vs DATETIMEMySQL의 TIMESTAMP는 좀 특별해요.내부적으로 UTC로 저장조회할 때 세션의 time_zone 기준으로 변환되어 표시됨반면 DATETIME은?변환 없이 입력한 값 그대로 저장단순하게 "보이는 시간"만 맞추고 싶다면 DATETIME도 방법!-- TIMESTAMP는 UTC로 저장 후 세션 타임존으로 변환CREATE TABLE test ( ..
JavaScript this 바인딩 이해하기 핵심 개념JavaScript에서 this는 함수가 어떻게 호출되느냐에 따라 결정됩니다. 함수를 작성할 때가 아니라, 실행될 때 결정된다는 게 핵심입니다.1. 기본 바인딩 (Default Binding)함수를 그냥 호출하면 this는 undefined가 됩니다 (strict mode/모듈 환경).function sayName() { console.log(this.name);}sayName(); // TypeError: Cannot read properties of undefined2. 암시적 바인딩 (Implicit Binding)객체의 메서드로 호출하면 this는 .앞의 객체를 가리킵니다.const person = { name: '철수', sayName: function() { console...
JavaScript 이벤트 루프: Task Queue vs Microtask Queue JavaScript는 싱글 스레드 언어입니다.그런데 어떻게 비동기 작업을 처리할 수 있을까요?**이벤트 루프(Event Loop)**를 사용할 수 있습니다.이벤트 루프란?이벤트 루프는 JavaScript 엔진이 비동기 작업을 처리하는 메커니즘입니다. 코드 실행을 관리하고, 대기 중인 작업들을 순서대로 처리합니다.핵심 구성 요소┌─────────────┐│ Call Stack │ ← 현재 실행 중인 코드└─────────────┘ ↓┌─────────────────┐│ Microtask Queue │ ← Promise, queueMicrotask (우선순위 높음)└─────────────────┘ ↓┌─────────────────┐│ Task Queue │ ← setTim..
TypeScript 인터페이스 확장: Declaration Merging과 Module Augmentation Next.js에서 NextAuth를 사용하여 인증 시스템을 구축하던 중, 다음과 같은 TypeScript 에러를 만났습니다.async session({ session, token }) { if (session.user) { session.user.id = token.id as string; // ❌ 에러! // Property 'id' does not exist on type } return session;}session.user에 id 속성을 추가하려고 했지만, TypeScript는 이 속성이 존재하지 않는다고 불평합니다. NextAuth의 기본 타입에는 name, email, image만 있고 id가 없기 때문이죠.이 문제를 해결하면서 TypeScript의 ..
Sequelize vs Prisma: Node.js ORM 비교 분석 Node.js 생태계에서 가장 많이 사용되는 두 ORM인 Sequelize와 Prisma를 비교합니다. 두 도구는 근본적으로 다른 철학과 접근 방식을 가지고 있습니다.핵심 요약Sequelize: 모델 클래스를 직접 작성 (Active Record 패턴)Prisma: Schema 파일만 작성 → 코드 자동 생성 (Schema-first 접근)Trade-off: - Prisma: 자동화, 타입 안전성 우선- Sequelize: 유연성, 레거시 지원, 큰 커뮤니티Sequelize의 모델 정의 방식Sequelize는 Laravel의 Eloquent처럼 모델 클래스를 직접 작성하는 방식입니다.파일 구조project/├── models/│ ├── User.js│ ├── Post.js│ └── Catego..
Prisma로 Next.js 블로그 만들기: 데이터베이스 설정부터 마이그레이션까지 PostgreSQL과 Next.js로 블로그를 만들면서 Prisma ORM을 처음 도입하게 되었습니다. MySQL을 주로 사용하던 입장에서 새로운 도구를 배우는 과정에서 겪은 시행착오와 해결 방법을 공유합니다.Prisma가 뭔가요?Prisma는 Node.js와 TypeScript를 위한 차세대 ORM(Object-Relational Mapping) 도구입니다. 기존의 SQL 쿼리를 직접 작성하는 방식에서 벗어나, 타입 안전성을 보장하면서도 직관적인 방식으로 데이터베이스를 다룰 수 있게 해줍니다.왜 Prisma를 선택했나?기존에 Laravel의 Eloquent ORM과 비슷하지만, TypeScript 지원이 훨씬 뛰어납니다:타입 안전성: 데이터베이스 스키마에서 자동으로 TypeScript 타입 생성직관적인..
웹 빌드 도구 비교: Webpack vs Vite vs Rollup 그리고 etc 모던 웹 개발에서 빌드 도구는 필수적입니다. 수많은 JavaScript 파일과 CSS, 이미지 등의 에셋을 최적화하고 번들링하여 브라우저가 효율적으로 로드할 수 있도록 만들어주죠. 하지만 선택지가 너무 많아서 어떤 도구를 써야 할지 고민되시나요? 이 글에서 주요 빌드 도구들을 비교하고, 여러분의 프로젝트에 가장 적합한 도구를 찾는 방법을 알려드리겠습니다.1. Webpack - 검증된 강자특징Webpack은 2012년부터 시작된 가장 성숙한 번들러입니다. 모든 것을 모듈로 취급하며, JavaScript뿐만 아니라 CSS, 이미지, 폰트 등 모든 에셋을 번들링할 수 있습니다.장점강력한 생태계: 수천 개의 플러그인과 로더 보유높은 커스터마이징: 복잡한 요구사항도 세밀하게 설정 가능코드 스플리팅: 동적 impo..

반응형