리눅스(Linux) 환경이나 WSL, Docker 컨테이너 안에서 Node.js, React, Vite 프로젝트 개발 서버를 띄워두고 작업하다가 갑자기 Error: ENOSPC: System limit for number of file watchers reached 에러와 함께 서버가 종료되는 현상을 경험해봤을 것이다. 다만 커널 레벨의 인노티파이(inot···
JavaScript에서 객체를 다루다 보면 Object.keys(), Object.entries(), Object.assign() 같은 메서드들을 마주친다. 다만 대부분의 개발자들은 이 메서드들의 정확한 동작 원리와 언제 어떤 상황에서 써야 하는지 모른 채 인터넷에서 가져온 코드를 그냥 복사해 붙인다. 이번에는 자주 쓰이는 Object 정적 메서드들이 정확···
카카오 로그인을 구현한 후 사용자 정보를 서버에서 직접 조회해야 할 상황을 겪은 적 있을까. 대부분의 개발자들은 클라이언트에서 받은 토큰으로 카카오 API를 호출하거나, 공식 문서의 예제를 그냥 복사해서 쓰다가 토큰 검증 실패나 필드 누락 같은 오류에 부딪힌다. 이번에는 카카오 Developers REST API에서 사용자 정보를 안전하게 조회하는 방법을 ···
PHP 코드를 작성하여 배포한 직후 런타임 환경에서 TypeError나 Call to a member function on null 에러가 발생해 급하게 핫픽스를 배포했던 경험이 있으신가요? 단순한 문법 검사(Lint)만으로는 실제 코드가 실행되는 시점에 발생하는 타입 불일치나 잠재적인 비즈니스 로직 버그를 미리 잡아내기 어렵습니다. 다만 대부분의 백엔드 ···
검색 결과 페이지(SERP)에서 경쟁사 웹사이트는 '홈 > 블로그 > 백엔드'처럼 깔끔한 탐색 경로가 표시되는데, 내 사이트는 볼품없는 복잡한 URL 문자열 그대로 노출되어 답답했던 경험이 있을 것이다. 다만 대부분의 개발자들은 이를 검색엔진 알고리즘의 무작위 선택으로 치부하고 넘어가거나, 검색 로봇에게 정확한 카테고리 구조를 전달하는 방법을 모르는 경우가···
Nginx와 PHP-FPM을 연동해서 웹 서버를 구동할 때 브라우저에 502 Bad Gateway 에러가 발생하는 경험을 해봤을 것이다. 웹 서버 프로세스는 정상적으로 실행 중인데 Nginx 에러 로그를 확인해보면 connect() to unix:... failed (13: Permission denied) 메시지가 찍혀 답답했던 경험이 있을 것이다. 다만···
사용자 입력 데이터를 받을 때마다 직접 정규표현식을 작성하고 있지는 않을까. 많은 개발자들이 각 데이터 타입마다 일일이 preg_match()를 짜거나, 검증 로직을 중복해서 만든다. 다만 PHP에는 이미 내장된 filter_var() 함수가 있어서 이메일, URL, IP, 정수, 실수 등 대부분의 타입을 한 줄로 검증할 수 있다는 사실을 모르는 경우가 많···
웹 서비스에 지도 기능을 추가하려 할 때, 대부분의 개발자들은 구글 맵만 생각한다. 하지만 국내 사용자를 타겟으로 한다면 네이버 맵이 훨씬 더 자연스럽고 빠르게 로드된다는 점을 놓치고 있다. 문제는 대부분의 튜토리얼이 JavaScript 클라이언트 중심으로만 설명되어 있다는 것이다. PHP 백엔드에서 Naver Map API v5를 제대로 연동하는 방법, ···
PHP 개발자라면 serialize()와 unserialize()를 캐싱이나 세션 저장 용도로 한두 번쯤은 써봤을 것이다. 그런데 대부분의 개발자들은 unserialize()가 얼마나 위험한지 모른 채 외부에서 들어오는 데이터를 그냥 역직렬화하고 있다. 공격자가 조작한 직렬화 문자열을 unserialize()에 넘기면 예상치 못한 객체 생성과 메서드 실행으···
구글 Search Console을 설치한 뒤 데이터가 쌓이는 걸 보면서 신기하긴 한데, 정확히 뭘 의미하는지 헷갈리는 개발자가 많다. 특히 '크롤 통계' 탭의 수치들이 실제 검색 성과와 어떤 관계가 있는지, 그리고 그 수치들을 어떻게 해석해야 하는지를 제대로 아는 사람은 드물다. 이번에는 Search Console의 핵심 지표들을 정확히 뭔지, 왜 중요한지···
웹 서비스에서 모달(Modal) 팝업을 구현할 때 z-index가 꼬이거나 배경 스크롤이 멋대로 움직이는 현상을 경험해봤을 것이다. 다만 대부분의 개발자들은 여전히 z-index: 99999 같은 임시방편 스크립트를 남발하거나 중량 라이브러리를 설치해서 해결하려 한다. 이번에는 최신 HTML5 표준 요소인 dialog 태그와 showModal() 메서드가 ···
웹사이트를 오픈하고 구글 Search Console에서 색인 생성 여부를 확인하다가 '크롤링됨 - 현재 색인 생성되지 않음' 메세지를 보고 당황한 적이 있을 것이다. 구글봇이 내 사이트에 방문해서 페이지를 분명 읽어갔는데도 정작 구글 검색 결과에는 등록해주지 않는 기이한 상황이다.다만 많은 개발자나 사이트 관리자들은 정확한 원인을 모른 채 무작정 Searc···
Google과 Bing에 사이트를 등록하는 건 많이 다루지만, 중국 시장을 노리는 개발자들이 놓치는 게 있다. 바로 Baidu 검색 엔진이다. 중국 내 검색 시장 점유율이 압도적인데도 대부분의 한국 개발자는 Baidu Webmaster Tools 존재 자체를 모르거나, 등록 과정이 복잡할 거라 생각해서 건너뛴다. 실제로 Baidu 검색 노출은 Google ···
자바스크립트로 배열을 다루다 보면 for 루프를 반복적으로 쓰거나, 복잡한 중첩 구조로 데이터를 처리한 경험이 있을 것이다. 다만 대부분의 개발자들은 map, filter, reduce 같은 고차 함수가 정확히 뭐하는 건지, 언제 써야 하는지, 성능은 괜찮은지 제대로 알지 못한 채 구글에서 가져온 코드를 그냥 복사해 붙인다. 이번에는 배열 메서드의 동작 원···
백엔드 로직 하나 수정하고 포스트맨으로 일일이 엔드포인트를 호출하며 테스트했던 경험이 있을 것이다. 코드가 복잡해질수록 수정 위치와 멀리 떨어진 다른 API가 갑자기 터지는 사이드 이펙트를 일일이 손으로 찾아내기는 사실상 불가능에 가깝다. 다만 정확한 테스트 환경 구축 방법이나 데이터베이스 Mocking 처리 기준을 모르는 경우가 많다. 이번에는 Jest와···
SNS에 글을 공유할 때 예쁜 썸네일이 나오는 경우와 나오지 않는 경우를 본 적 있을까. 대부분의 개발자는 Open Graph 메타태그만 넣고, 이미지를 하드코딩된 파일 경로로 고정해둔다. 하지만 게시글마다 다른 제목, 날짜, 카테고리 정보를 담은 썸네일을 동적으로 생성할 수 있다면 훨씬 더 프로페셔널한 SNS 공유 경험을 만들 수 있다. 이번에는 PHP의···
Node.js 애플리케이션을 실행하려 할 때 Error: listen EADDRINUSE: address already in use :::3000 문구를 만나 당황해본 적이 있을 것이다.다만 왜 이미 사용 중이라고 나오는지 정확한 원인을 몰라 컴퓨터를 재부팅하거나 포트 번호만 임의로 바꾸는 경우가 많다.이번 글에서는 EADDRINUSE 에러가 발생하는 정확···
인스타그램에서 비즈니스 데이터를 자동으로 수집하거나 게시물을 프로그래밍 방식으로 관리하려는 개발자들이 늘어나고 있다. 다만 Meta의 Graph API 문서는 복잡하고, 접근 토큰 발급부터 API 호출까지 실제로 구현하다 보면 인증 오류나 권한 문제에 자주 막힌다. 이번에는 Instagram Graph API v18을 PHP에서 제대로 연동하는 방법을 처음···