많은 개발자와 마케터들이 Google Search Console에만 집중하느라 Bing 검색 엔진을 놓친다. 다만 Bing은 전 세계 검색량의 약 3~5%를 차지하고 있고, 특히 기업 사용자와 Windows 통합 검색에서 여전히 중요한 역할을 한다. 게다가 검색 노출 설정 방식이 Google과 다르기 때문에 제대로 알지 못하면 Bing에서는 아예 색인되지 ···
웹사이트의 URL 구조를 리뉴얼하거나 특정 페이지를 새 주소로 옮길 때 리다이렉트(Redirect)를 설정해본 경험이 있으실 겁니다.다만 대부분의 개발자들은 301과 302 상태 코드의 명확한 차이점과 이것이 검색엔진 크롤러에 미치는 치명적인 영향을 모른 채 단순 이동용으로 302나 자바스크립트 이동을 남발하곤 합니다.이번 글에서는 301과 302 리다이렉···
배열에서 특정 키가 존재하는지 확인할 때 많은 개발자들이 isset()과 array_key_exists()를 같은 것으로 생각한다. 다만 둘은 null 값을 처리하는 방식이 완전히 다르고, 이 차이를 모르면 버그를 찾기 어렵다. 이번에는 두 함수가 정확히 뭐가 다른지, 언제 뭘 써야 하는지, 실전 예제로 완벽하게 정리해서 소개하겠다. 1단계: 기초 개념 -···
웹 서비스를 개발하며 회원 시스템을 구축할 때 사용자의 비밀번호를 md5나 sha256으로 단순 해싱해서 DB에 저장해 본 경험이 있을까? 다만 대다수 개발자가 솔트(Salt)의 정확한 개념이나 Bcrypt 알고리즘의 필요성을 모른 채 인터넷 블로그의 구형 코드를 그대로 복사해 붙이는 경우가 많다. 이번에는 PHP에서 제공하는 password_hash()와···
PHP로 배열을 다루다 보면 특정 키가 존재하는지, 값이 있는지 확인해야 할 순간이 자주 온다. 다만 대부분의 개발자들은 isset(), array_key_exists(), in_array() 세 함수의 차이를 명확히 모른 채 상황에 맞지 않는 함수를 써서 버그를 만든다. 이번에는 이 세 함수가 정확히 뭐가 다르고, 언제 어떤 걸 써야 하는지, 그리고 각각···
DB에서 데이터를 조회한 뒤 PHP 단에서 특정 키(Key) 기준으로 연관 배열 목록을 재정렬해야 할 때, 매번 usort()나 array_multisort()의 복잡한 익명 함수 문법 때문에 애를 먹은 적이 있을 것이다.다만 대부분의 개발자들은 array_multisort()에 인자를 전달하는 방식이나 usort()의 우주선 연산자() 작동 원리를 정확히···
구글 서치 콘솔을 확인해보니 모바일에서는 검색 노출이 잘 되는데 PC에서는 떨어져 있다거나, 반대 상황을 경험해봤을까? 혹은 구글에서 보낸 알림메일에 "Mobile-First Indexing" 같은 낯선 용어가 나와서 막막했던 경험이 있을까? 대부분의 웹 개발자와 SEO 담당자들은 이게 정확히 뭔지, 왜 신경 써야 하는지, 어떻게 대비해야 하는지 모른 채로···
웹사이트의 정적 리소스나 콘텐츠를 수정했음에도 사용자의 브라우저에는 계속 옛날 버전이 노출되어 난감했던 경험이 있을 것이다.다만 Cloudflare CDN을 사용하는 환경에서 관리자 페이지 내 콘텐츠 업데이트 기능과 연동하여 캐시를 자동으로 지우는 방법을 몰라, 매번 Cloudflare 대시보드에 로그인하여 수동으로 버튼을 누르는 경우가 많다.이번에는 Cl···
배열 처리 작업을 하다 보면 두 개의 배열을 하나로 병합해야 하는 상황이 자주 생긴다. 예를 들어 CSV 파일에서 헤더 행과 데이터 행을 읽었을 때, 각 데이터를 헤더와 매핑해야 하거나, API 응답에서 이름 배열과 값 배열을 받았을 때 이를 연결하는 경우다. 다만 대부분의 개발자들은 반복문으로 일일이 처리하거나, 존재하지 않는 함수를 찾아 헤매는 경우가 ···
복잡한 결제 처리나 회원 가입 과정에서 여러 개의 데이터베이스 쿼리를 연속으로 실행하다가 중간에 에러가 발생하여 데이터가 꼬인 경험이 있을 것이다.다만 트랜잭션의 정확한 작동 원리나 예외 처리 방식을 모른 채 개별 쿼리만 연속으로 던지는 개발자가 많다.이번에는 PHP PDO 환경에서 데이터 정합성을 완벽하게 보장하는 트랜잭션(Transaction)의 기본 ···
PHP 개발자들이 자주 쓰는 삼항 연산자(ternary operator)는 사실 꽤 장황하고 읽기 어렵다. 특히 변수가 null인지 확인하고 기본값을 할당할 때마다 isset() ? $var : $default 같은 코드를 반복하면서 코드가 금방 복잡해진다. 다만 PHP 7.0 이상에서 제공하는 Null Coalescing Operator(??)와 Spac···
클라이언트 사이드에서 PG사 결제 창을 호출하고 결제를 진행할 때, 악의적인 사용자가 개발자 도구를 통해 결제 금액을 10원이나 100원으로 위변조하는 문제를 경험해봤을까?웹 서비스 개발에서 PG(결제대행사) 연동은 필수적이지만, 많은 개발자가 클라이언트 자바스크립트 응답만 신뢰하고 DB를 업데이트하는 치명적인 실수를 저지른다.다만 정확한 서버 대 서버(S···
검색 엔진에서 자신의 웹사이트가 어떤 키워드로 몇 위에 나타나는지 알아야 SEO 전략을 세울 수 있다. 다만 Google Search Console의 웹 인터페이스에서 수동으로 확인하다 보면 시간이 너무 오래 걸리고, 매달 순위 변동을 추적하기도 어렵다. 이번에는 Google Search Console API를 PHP에서 직접 연동해서 검색 순위와 클릭수,···
웹 서비스나 앱을 개발하면서 사용자의 현재 위치에 맞는 실시간 날씨 데이터를 보여줘야 하는 상황을 경험해봤을까? 공공데이터포털에서 제공하는 기상청 단기예보 API는 대한민국 전역의 날씨 정보를 무료로 활용할 수 있는 가장 확실한 도구다. 다만 API를 신청하고 코드를 작성했음에도 인증키 오류(SERVICE_KEY_IS_NOT_REGISTERED_ERROR)···
웹 서비스를 개발하다 보면 사용자가 브라우저 탭을 전환하거나 창을 최소화했음에도 백그라운드에서 실시간 API 요청(Polling)이나 타이머, 애니메이션이 계속 실행되는 상황을 경험해봤을 것이다.다만 대부분의 개발자들은 탭의 활성화 상태를 감지하는 정확한 표준 기술을 모른 채 `window.onblur` 이벤트를 대충 쓰거나, 백그라운드에서 불필요하게 서버···
GitHub API를 써본 개발자라면 대부분 REST API를 먼저 접한다. 다만 복잡한 저장소 정보를 가져올 때 여러 번의 API 호출이 필요하고, 불필요한 필드까지 받게 되는 비효율성을 경험해봤을 가능성이 높다. 이번에는 GraphQL API로 이 문제를 어떻게 해결하는지, 실제로 어떻게 PHP에서 연동하는지 완벽하게 정리해서 소개하겠다. 1단계. Gi···
백엔드 개발자라면 데이터베이스 관리의 복잡함을 경험해봤을 것이다. 특히 자체 서버에 MySQL을 관리하거나, 클라우드 데이터베이스 설정에 골치가 아픈 경험을 많이 한다. 다만 대부분의 개발자들은 서버리스 데이터베이스의 존재를 알면서도 실제로 어떻게 연동하는지, 인증은 어떻게 처리하는지 정확히 모른 채 복잡한 자체 구축 방식만 고집한다. 이번에는 Supaba···
PHP에서 데이터베이스나 배열의 한글 데이터를 JSON으로 변환할 때 이상한 문자열로 깨져나오는 현상을 경험해봤을까? 대부분의 개발자들은 json_encode()를 쓸 때 기본값만 사용하다가 한글이 유니코드 이스케이프 시퀀스(uXXXX 형태)로 나타나는 문제를 마주친다. 다만 이게 단순히 '표시 문제'인지 '실제 데이터 손상'인지, 어디서부터 인코딩을 맞춰···