Blog

  • 같은 옵션에 경쟁을 붙이면 어떻게 될까?

    워드프레스 옵션 테이블에서 get_option(), update_option()을 빈번히 발생해 경쟁 조건을 일으켜 보았습니다. 그리고 이것을 어떻게 해결하는지 알아보았습니다.

  • 아파치 워드프레스 관리자 IP 접속 제한

    주로 보안 제약이 강한 대기업 블로그에서 주로 요구하는 사항인데, 관리자나 로그인 페이지의 접근을 IP 대역으로 막는다. 주의할 점은 관리자 페이지를 막아도 admin-ajax.php, admin-post.php 의 접근은 열어 두어야 한다는 거다. 그것까지 다 막으면 워드프레스의 일반적인 폼 제출과 AJAX 요청까지 다 틀어막혀 사이트 동작이 되지 않을 수 있다. 아래 코드를 참고하여 아파치 설정에 추가한다. LocationMatch 지시자는 .htaccess…

  • 죽고 싶지만 떡볶이는 먹고 싶어 감상

    사실 나는 독서를 잘 안한다. 책 읽는 습관을 들이지 못했다. 집에 있으면 누워 있기만 했고, 여유 있는 시간에는 게임, 만화, 유튜브 시청을 더 좋아한다. 그런데 요즘은 좀 달라졌다. 게임은 시들해졌고, 만화는 유치해졌다. 유튜브 동영상은 맨날 그나물에 그 밥이었다. 깊은 맛이 부족했다. 외롭다는 감정이 좀 고통스럽게 느껴졌다. 사람을 만나고 싶은데, 이야기하고, 듣고 싶고, 교류하고 싶은데 그게…

  • 이번 번역은 정말 아쉽다

    이번 워드프레스 한글 번역을 누가 했는지 물어보고 싶다. 업데이트를 ‘업대이트’, 페이지를 ‘패이지’라고 한다. 번역에서 % 서식 표시 미스로 인해 PHP 7.4이하에서는 경고, 8.0부터는 무려 에러를 낸다. 다만 ‘테마 디자인’을 ‘외관’으로 번역한 건 좀 맘에 든다.

  • gulpfile.js

    스크립트 minification 을 위해 자주 사용하는 gulpfile.js 템플릿 코드

  • 콘텐츠 입장에서 구성하고 작성하라

    철저히 콘텐츠 입장에서 콘텐츠가 보이는 사람에게 어떻게 전달될지 고민하라. 내가 보는 콘텐츠 관점을 버려라. ‘내’가 콘텐츠를 관리하는 주체라고 생각하여 콘텐츠를 보는 사람과 콘텐츠 사이에 중개체로 나를 끼우는 것은 곤란하다. 언제나 콘텐츠 스스로가 콘텐츠의 관점에서 스스로의 정보를 설명하게 하라. 내가 그 콘텐츠라면? 나를 소개하는 설명서가 이 콘텐츠라면? 이라고 상상해보자.

  • 속깊은 JavaScript

    도서 정보 링크 이 책은 작년쯤 사두고 방치해 두었다. 여유있을 때 조금씩 책을 읽고 싶은 마음이 들었는데, 방치해둔 책을 끝까지는 읽어보고픈 맘이 들어 읽게 되었다. 읽고 나니, 읽었던 기록을 남기고 싶었다. 간단히 적어 본다. 독서가 습관이 아닌 나, 글쓰기에 서투른 나다. 블로그에 글 적어 봐야 아무도 관심가지지 않을 거라는 확신 하에 적어 본다. 2020년 12월…

  • 자동 업데이트 후 이메일 생략하기

    요즘 자동 업데이트는 잘 되는 편인데, 굳이 의미없는 이메일을 받는 건 좀 부담스럽다. 이메일 끄는 mu 플러그인을 아래처럼 만들어 붙일 수 있겠다.

  • ownCloud에서 NextCloud로 전환

    둘이 은근히 비슷한 점이 있는 것 같은데… ownCloud보다 NextCloud가 훨씬 더 많은 것을 할 수 있는 것 같다. 이제 ownCloud 보다 NextCloud를 사용한다.

  • ESNext #07: Redux Hello, World

    Redux는 어플리케이션의 상태 관리를 위한 라이브러리이다. 하도 이 리덕스를 리액트랑 같이 엮어 들었던 탓에 리액트 라이브러리인줄 알았으나, 그렇지는 않더라. 그냥 독립적으로도 사용 가능하다. 얼마 전에 상태 변화가 빡센 웹 앱을 작성한 프로젝트가 있었는데 이런저런 문제로 인해 jQuery 스타일로 매우 빡빡하게 만들었다. 어떻게는 완료하였으나 Redux를 조금 더 일찍 알았더라면 보다 깔끔하고 완성도 높은 결과물이 나왔을걸 하고…

  • wp_localize_script()로 숫자를 전달할 때

    아래 예제 코드와 결과를 보면 명확하다. wp_localize_script() 로 전달한 연관 배열의 최상위 키의 값들은 모두 문자열로 변경된다. 때때로 PHP 측에서 자바스크립트 쪽으로 값을 전달할 때 타입이 달라 의도치 않은 버그를 낼 때가 있다. 이것은 wp_localizae_script() 함수의 알짜인 WP_Scripts::localize() 함수 구현에서 이유를 찾을 수 있다. 함수 내부에서 배열 내부의 키/값을 순회하면서 값을 문자열로 캐스팅한다. 단, 스칼라가…

  • 우커머스 장바구니 추가 로직에 대해 노트

    우커머스 장바구니 추가 로직에 대해 노트

    우커머스 상거래 중 기본이 되는 작업 중 하나는 장바구니에 물건을 담는 과정일 것이다. 관련 플러그인 개발을 하면서 자꾸 이 부분을 반복하게 된다. 하여 이 과정을 아주 간단하게 노트한다. 우커머스에는 기본적으로 네 가지 상품 타입이 존재한다. 기본 상품 (simple) 옵션 상품 (variable) 그룹 상품 (grouped) 외부 상품 (external) 이중 외부 상품은 사이트 외부의 상품을 단순 링크할…

  • captcha

    구글 reCaptcha가 월 1백만건 초과건에 대한 사용량에 따라 요금을 내야 한다고 한다. hCaptcha는 좋은 대안이 될 수 있을 것 같다. 엔터프라이즈가 아니라면 무제한으로 사용할 수 있다. 워드프레스나 설치형으로 작성하려면 BotDetect Captcha 가 대안이 될 것이다.

  • SSH Remote Forwarding으로 개발 서버를 임시 노출하기

    개발 서버는 내부 네트워크 안에 있어 외부에서는 접속이 불가하다. 그러나 가끔 외부 네트워크에 노출해야만 하는 경우가 발생한다. 이 때 SSH 터널링으로 외부에 있는 서버를 경유하여 내부로의 접근이 가능하게 할 수 있다. 다음 스텝을 따라해 보자. 원격 서버에 접속할 때 포워딩할 포트를 지정한다. 여기서는 12000번이라고 가정한다. 만약 원격 서버도 공유기 같은 장비에 물려 있다면 12000번으로 포트…

  • 혼잣말

    당뇨는 습관의 질병.

  • Heartbeat 주기 설정하기

    Heartbeat Control 같은 플러그인이 있지만, 굳이 플러그인까지 쓸 필요 없다. 간단한 몇 줄의 코드로 주기 설정이 가능하다. 우선, heartbeat가 어떻게 동작하는지 간단하게 설명한다. heartbeat는 특정 관리자 페이지 접속시 브라우저와 주기적으로 통신한다. 이 주기는 자바스크립트의 setTimeout() 함수로 구현되며, 기본값은 관리자 페이지에 포커스가 있을 때 15초, 해당 페이지에서 포커스를 잃었을 때 120초로 설정된다. 이 120초는 하드코딩되어 있어…

  • 멀티사이트의 멀티사이트, 멀티 네트워크

    멀티 사이트는 여러 워드프레스 사이트를 하나의 설치본으로 관리할 수 있게 한다. 이렇게 만들면 데이터베이스에는 추가적으로 테이블이 생기게 된다. 이 중 wp_blogs, wp_site 가 눈에 뜨인다. 보통 멀티사이트를 만들면 wp_blogs 에는 멀티로 만든 사이트 목록이 기록된다. 그리고 wp_site는 주로 단일 레코드가 기록될 것이다. 그런데 wp_site의 레코드를 통해 멀티사이트의 확장이 가능하다. 즉, 하나의 워드프레스 설치본으로 멀티사이트를 여러…

  • 혼잣말

    즐거운 삶을 살자.