Concepts16
- 서버가 호출하는 API와 브라우저가 호출하는 API는 다르다 : NEXTJS
Next.js로 개발하다 보면 이런 상황을 마주친다. 분명히 서버에서 API를 잘 호출하고 있는데, 같은 주소를 클라이언트 컴포넌트에서 쓰면 요청이 실패한다. 로컬에서는 둘 다 되던 코드가, 배포하고 나면 클라이언트 쪽만 망가진다. 이 글은 그 원인 …
- Next.js 캐싱의 기본값과 동적 렌더링 전환 조건
Next.js 공식 문서(Glossary)는 다음과 같이 명시한다. 즉, Request-time API를 사용하지 않는 컴포넌트는 기본적으로 빌드 시점에 HTML을 생성해 캐싱한다. dynamic 옵션의 기본값인 'auto'에 대한 설명도 같은 방향이…
- Vue 개발자가 Next.js를 배우며 겪은 혼란: Server Component와 Client Component 이해하기
Vue와 Nuxt에 익숙한 개발자로서 Next.js를 처음 접했을 때, 가장 혼란스러웠던 부분은 "왜 데이터를 fetch 했는데 화면이 업데이트되지 않는가?"였습니다. Vue에서는 당연하게 작동하던 반응형 시스템이 Next.js에서는 전혀 다른 방식으…
- Dart 메서드 vs Getter: 언제 무엇을 사용해야 할까?
Flutter/Dart로 개발하다 보면 클래스의 속성에 접근하는 방법을 선택해야 할 때가 있습니다. 메서드로 구현할지, getter로 구현할지 고민되는 순간들이 있죠. 오늘은 이 둘의 차이와 올바른 선택 기준을 명확하게 정리해보겠습니다. 핵심 차이: …
- JavaScript 개발자가 Flutter의 copyWith를 이해하기까지
시작하며 Flutter를 배우면서 가장 궁금했던 것 중 하나가 바로 copyWith 패턴이었습니다. "JavaScript였으면 그냥 바꾸면 되는데..." 라는 생각이 들었습니다. 하지만 실제로 사용해보니 이 패턴이 왜 필요한지 이해하게 되었고, 오늘은…
- Git 경고 해결하기: CRLF와 LF, 그게 뭔데?
Windows 환경에서 Flutter 프로젝트를 만들고 Git에 커밋하려는 순간, 이런 경고 메시지를 본 적 있으신가요? 처음 보면 당황스럽지만, 사실 이 경고는 매우 흔한 상황입니다. 오늘은 CRLF와 LF가 무엇인지, 왜 이런 경고가 뜨는지, 그리…
- JavaScript this 바인딩 이해하기
JavaScript에서 this는 함수가 어떻게 호출되느냐에 따라 결정됩니다. 함수를 작성할 때가 아니라, 실행될 때 결정된다는 게 핵심입니다. 함수를 그냥 호출하면 this는 undefined가 됩니다 (strict mode/모듈 환경). 객체의 메…
- JavaScript 이벤트 루프: Task Queue vs Microtask Queue
JavaScript는 싱글 스레드 언어입니다. 그런데 어떻게 비동기 작업을 처리할 수 있을까요? **이벤트 루프(Event Loop)**를 사용할 수 있습니다. 이벤트 루프는 JavaScript 엔진이 비동기 작업을 처리하는 메커니즘입니다. 코드 실행…
- TypeScript 인터페이스 확장: Declaration Merging과 Module Augmentation
Next.js에서 NextAuth를 사용하여 인증 시스템을 구축하던 중, 다음과 같은 TypeScript 에러를 만났습니다. session.user에 id 속성을 추가하려고 했지만, TypeScript는 이 속성이 존재하지 않는다고 불평합니다. Nex…
- Sequelize vs Prisma: Node.js ORM 비교 분석
Node.js 생태계에서 가장 많이 사용되는 두 ORM인 Sequelize와 Prisma를 비교합니다. 두 도구는 근본적으로 다른 철학과 접근 방식을 가지고 있습니다. Sequelize는 Laravel의 Eloquent처럼 모델 클래스를 직접 작성하는…
- apt autoremove란? 리눅스 패키지 관리의 숨은 조력자
리눅스에서 패키지를 제거할 때 이런 명령어를 본 적 있으신가요? 왜 remove 다음에 autoremove를 또 실행할까요? 이 두 명령어의 차이를 알아보겠습니다. 리눅스에서 프로그램을 설치할 때는 그 프로그램 하나만 설치되는 게 아닙니다. 프로그램이…
- MySQL vs PostgreSQL 차이점 비교 - 프로젝트에 맞는 DB 선택 기준
오늘은 두 데이터베이스의 차이점을 실제 사용 경험을 바탕으로 상세히 비교해보겠습니다! 특징 MySQL PostgreSQL MySQL은 일반적으로 필요한 데이터 타입들을 제공합니다. PostgreSQL은 훨씬 더 다양한 데이터 타입을 제공합니다. 실제 …
- 😲 “((” 이게 다르다고? — 괄호의 숨겨진 정체
어느 날, ((와 같은 괄호가 텍스트 치환이 안 되는 이상한 상황을 마주했습니다. 분명 코드에서는 "("를 잘 인식하고 있었는데, 현실에서는 작동하지 않더군요. 왜 그럴까요? 우리가 흔히 쓰는 괄호 (와 )는 키보드에서 쉽게 입력할 수 있습니다. 그런…
- Laravel 외래 키 삭제 처리 – onDelete() 옵션 정리
Laravel에서 테이블 간 외래 키(foreign key)를 설정할 때, 부모 테이블의 데이터가 삭제되면 자식 테이블에 어떤 영향을 줄지 설정할 수 있습니다. 이때 사용하는 메서드가 바로 onDelete()입니다. 이 글에서는 Laravel 마이그레…
- Vue 3 컴포넌트 간 데이터 전달 방법 총정리 (props, emit, Pinia)
Vue 3는 컴포넌트 간 통신을 위한 다양한 방법을 제공합니다. 오늘은 부모 컴포넌트와 자식 컴포넌트 사이에서 데이터 변동을 감지하는 주요 방법들에 대해 알아보겠습니다. 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하고, 자식에서 부모로 이벤트를 전…
- Swift 기본 문법과 데이터 타입
스위프트(Swift)는 애플(Apple)에서 개발한 새로운 프로그래밍 언어로, iOS, macOS, watchOS, tvOS 등 다양한 애플 플랫폼에서 개발을 위해 사용됩니다. 이번 글에서는 스위프트의 기본 문법과 데이터 타입에 대해 예제를 통해 알아…