[태그:] 블로그 운영

  • wp-config.php 건드리기 전 백업 안 하면 낭패

    wp-config.php 건드리기 전 백업 안 하면 낭패

    wp-config.php 건드리면 사이트 날아갈까요?

    워드프레스 블로그 보안 유지를 위해 wp-config.php 수정 실수를 두려워하는 분이 많다. 파일 하나 잘못 건드리면 화면이 하얗게 변하거나 접속조차 안 되는 경험, 한 번쯤은 겪어봤을 테다. 나도 자동화 SaaS를 운영할 때 코드 한 줄 오타로 cron 63개가 전부 멈춰버린 사례가 있다. 서비스가 마비되니까 당황스럽기 그지없다. 이유는 단순했다. 문법 오류가 발생했는데, 모니터링 시스템이 이를 잡아내지 못한 것이다.

    중요한 건 ‘두려움’이 아니라 ‘복구 전략’이다. 단순히 FTP에 접속해서 파일을 다운로드받는 것만으로는 부족하다. 자동화 운영 환경에서는 백업 파일이 구버전으로 덮어씌워지는 ‘백업 파괴’ 현상이 종종 발생하기 때문이다. 수정 직전의 순수 상태 파일을 로컬이나 별도 원격 스토리지에 분리해서 보관하는 습관이 생명줄이 된다.

    수정 전 백업, 어디서부터 해야 할까요?

    백업이라고 플러그인 백업 기능만 믿으면 안 된다. 플러그인이 돌아가지 않는 상황(WSOD)이 오면 플러그인 백업 자체가 실패했을 수도 있다. 호스팅 관리자 페이지에 들어가서 파일 관리자를 켠다. wp-config.php 백업은 웹 문서 루트 밖이나 접근이 차단된 별도 저장소에 보관하고, 웹에서 요청 가능한 위치에 .bak 파일을 두지 않는다. 이 과정이 수정 사항을 적용하기 전에 필수적으로 거쳐야 할 관문이다. 워드프레스 보안 핵심은 인증 정보를 노출하지 않고, 불필요한 경로를 차단하는 흐름을 만드는 데 있다.

    실수했을 때 대처법: FTP 접속 없이 복구하기

    혹시라도 잘못 수정했다 싶으면 당황하지 말고 브라우저 호스팅 패널의 '파일 관리자'로 바로 들어간다. FTP 클라이언트를 설치할 시간조차 아까울 수 있다. wp-config.php 파일의 마지막 수정 시간을 확인하고, 방금 만든 .bak 파일 내용을 복사해서 붙여넣은 뒤 저장한다. 이 과정을 1분 안에 해결하면 방문자는 사이트 중단을 눈치채지 못한다. SSL 강제 등 보안 코드를 잘못 넣어서 '무한 리다이렉트 루프'에 빠졌을 때도, 파일 관리자로 접속해서 해당 코드 라인만 주석 처리(//) 하면 즉시 해결된다.

    보안 강화를 위해 반드시 수정해야 할 4곳

    복잡한 플러그인 설치 없이 텍스트 편집기로 몇 줄만 바꾸면 보안 효과는 확실해진다. 자동화 파이프라인이 주 1~5편으로 불규칙하게 글을 쓰고, 문체 검사를 통과한 글만 공개되듯, 보안 설정도 일회성이 아니라 주기적인 점검이 필요하다.

    보안 키(Salts) 갱신으로 쿠키 해킹 막기

    WordPress 보안 키와 salt는 인증 쿠키와 nonce의 해시·HMAC을 생성하고 검증하는 데 사용하는 비밀값이다. 이 값이 쉽게 유추되면 해커가 쿠키를 위조하여 관리자 세션을 탈취할 위험이 크다. 기본값으로 둔 채로 쓰는 것은 자물쇠에 '1234'를 다는 것과 같다. 워드프레스 공식 API 키 생성 페이지에 접속해서 뜨는 코드를 그대로 복사해 wp-config.php의 해당 칸에 붙여넣는다.

    
    // 설치 직후 wp-config.php 에는 이렇게 자리표시자만 들어 있다.
    define( 'AUTH_KEY',         'put your unique phrase here' );
    define( 'SECURE_AUTH_KEY',  'put your unique phrase here' );
    define( 'LOGGED_IN_KEY',    'put your unique phrase here' );
    define( 'NONCE_KEY',        'put your unique phrase here' );
    define( 'AUTH_SALT',        'put your unique phrase here' );
    define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
    define( 'LOGGED_IN_SALT',   'put your unique phrase here' );
    define( 'NONCE_SALT',       'put your unique phrase here' );
    

    이 8줄을 통째로 지우고, 공식 생성기
    뱉어낸 8줄을 그대로 붙여넣는다. 값은 매번 새로 만들어지므로 남이 블로그에 적어둔 문자열을 복사해 쓰면 안 된다
    — 공개된 키는 없는 키와 같다. 새로고침할 때마다 다른 값이 나오는 것이 정상이다.

    이 코드를 적용하면 기존에 로그인된 사용자는 다시 로그인해야 한다. 쿠키가 무효화되기 때문이다. 보안 키를 교체하면 기존 로그인 쿠키가 무효화되므로 쿠키 유출이 의심될 때 세션을 강제로 종료하는 데 유용하지만, 다른 공격 경로까지 막지는 않는다.

    디버그 모드 끄고 에러 로그 숨기기

    운영 환경에서는 절대 에러 메시지가 화면에 출력되면 안 된다. PHP 경로나 데이터베이스 구조가 화면에 그대로 노출되면 공격자에게 침투 경로를 알려주는 꼴이 된다. wp-config.php 하단에 있는 디버그 상수를 모두 false로 설정한다.

    
    모든 PHP 코드 예시에서는 곡선 따옴표가 아닌 ASCII 따옴표를 사용한다: `define( 'WP_DEBUG', false );
    define( 'WP_DEBUG_LOG', false );
    define( 'WP_DEBUG_DISPLAY', false );
    

    에러를 확인해야 한다면 서버의 error.log 파일을 직접 까보는 습관을 들이는 게 좋다. 화면에 안 보인다고 해결된 게 아니다. 내부적으로 로그를 쌓으면서 조용히 문제를 해결하는 편이 낫다.

    테이블 접두사 변경 — 효과와 한계

    워드프레스를 설치할 때 기본 테이블 접두사는 wp_다. 새로 설치할 때는 myblog_처럼 예측하기 힘든 접두사를 쓰는 편이 낫다. 자동화된 스캐너가 테이블 이름을 찍어놓고 던지는 공격을 한 겹 걷어내 주기 때문이다.

    다만 이것을 SQL 인젝션 대책으로 이해하면 안 된다. 접두사 변경은 이름을 가리는 것(security through obscurity)일 뿐이고, 인젝션을 실제로 막는 것은 워드프레스가 쿼리를 준비된 문장으로 만들어 주는 $wpdb->prepare()다. 취약한 플러그인이 사용자 입력을 그대로 쿼리에 이어 붙이면 접두사를 뭘로 바꿔놨든 뚫린다. 접두사 변경은 보조 장치이지 방어선이 아니다. 그리고 이미 운영 중인 사이트에서 테이블 이름을 일괄 변경하는 작업은 잘못하면 사이트가 통째로 날아가므로 초보자에게는 추천하지 않는다.

    플러그인 없이 코드로 차단하는 공격 기법

    플러그인은 편하지만, 플러그인 자체의 취약점이 새로운 해킹 루트가 되는 경우도 허다하다. 나는 가능한 코드 레벨에서 직접 차단하는 것을 선호한다. wp-config.phpfunctions.php, 그리고 .htaccess 파일을 조합하면 플러그인 없이도 탄탄한 방벽을 구축할 수 있다. 자동화 LLM을 헤드리스로 부를 때 기본 설정이 1회 $0.67이었는데, 불필요한 도구를 떼어내고 모델을 가벼운 쪽으로 바꿔 $0.0285까지, 약 24배 줄인 경험처럼, 불필요한 요청을 원천 차단하면 리소스 효율도 비약적으로 올라간다.

    XML-RPC 및 REST API 무차별 대공격 막기

    xmlrpc.php는 원격에서 블로그를 관리하기 위한 기능이지만, DDoS 공격이나 무차별 대공격(Brute Force)에 악용되는 주요 타겟이다. xmlrpc_enabled` 필터는 인증이 필요한 XML-RPC 메서드만 끄며, XML-RPC 요청 전체를 차단하려면 웹 서버나 WAF 설정 또는 메서드별 필터가 추가로 필요하다. functions.php에 아래 코드를 추가한다.

    
    add_filter('xmlrpc_enabled', '__return_false');
    

    REST API 역시 불필요한 외부 호출을 막아야 한다. 다만, 내가 만든 SaaS처럼 외부 서비스와 연동이 필요한 경우 API를 완전히 막으면 서비스가 멈춘다. 이럴 땐 특정 IP나 인증된 사용자에게만 접근을 허용하는 예외 처리를 필수적으로 넣어야 한다. 허용 IP를 설정하는 경험을 통해, 보안 설정과 기능 동작의 균형을 맞추는 법을 터득했다.

    파일 직접 접근 차단 (Disable File Editing)

    워드프레스 관리자 화면에서 테마나 플러그인의 코드를 직접 수정할 수 있는 기능이 있다. 편하지만 해커가 관리자 권한을 탈취했을 때 악성 코드를 심는 가장 쉬운 방법이기도 하다. wp-config.php에 이 코드를 한 줄 추가하면 관리자 화면에서 더 이상 파일 편집이 불가능해진다.

    
    define( 'DISALLOW_FILE_EDIT', true );
    

    이 설정은 코드 수정은 무조건 FTP나 파일 관리자로 하게 만든다는 뜻이다. 귀찮아진다고 생각할 수 있지만, DISALLOW_FILE_EDIT`는 관리자 화면의 파일 편집 경로 하나를 제거하지만, 관리자 계정 탈취 후의 모든 코드 변경을 막는 설정은 아니다.

    외부 API 호출과 보안 설정의 충돌 해결법

    보안 코드를 넣다 보면 의도치 않게 정상적인 기능이 막히는 수가 있다. 예를 들어, SSL 강제 리다이렉트를 걸었는데 특정 결제 모듈이 비보안 콜백을 요구하면 결제가 실패한다. 이럴 때는 .htaccess 파일에서 특정 경로만 SSL 예외로 두는 세심한 설정이 필요하다. 보안이 중요하지만, 사이트가 기능을 못 하면 존재 의의가 사라진다. 문제가 생겼을 때는 즉시 방금 수정한 설정을 주석 처리하고, 접속 로그를 확인해서 어떤 요청이 막혔는지 파악해야 한다.

    코드로 공격 차단하기

    잘못 수정했을 때 사이트가 멈추면 복구하는 절차

    아무리 조심해도 실수는 하기 마련이다. 내가 운영하는 시스템도 문법 오류가 나면 알림을 보내는 모니터링을 돌리고 있다. 문제는 화면이 하얗게 나오는 WSOD(White Screen of Death) 상황이 언제 터질지 모른다는 점이다.

    화면이 하얗게 나올 때(WSOD) 원인 파악

    WSOD는 대부분 PHP 메모리 부족이나 문법 오류 때문에 발생한다. wp-config.php를 수정한 직후에 이 화면이 떴다면 문법 오류부터 의심하는 게 순서다. 누락된 세미콜론(;)이나 따옴표 짝이 안 맞는지 의심해야 한다. 에러 로그를 볼 수 없다면, 해당 파일 수정 내용을 하나씩 지워가면서(혹은 주석 처리하면서) 어디서 문제가 터지는지 확인한다.

    문법 오류(Syntax Error) 발생 시 수정법

    브라우저 화면에 "Parse error: syntax error" 같은 메시지가 뜬다면 다행이다. 몇 번째 줄에서 무엇이 잘못됐는지 알려주기 때문이다. FTP 대신 파일 관리자로 접속해서 해당 라인으로 이동해 수정한다. 만약 수정 사항이 기억나지 않는다면, 처음에 백업해 둔 .bak 파일로 덮어씌우는 것이 정신 건강에 이롭다. 자존심 세울 때가 아니다.

    백업 파일로 원복하는 마지막 단계

    사이트가 죽었을 때 급하게 복구하다 보면, 오류가 난 파일을 또 백업해버리는 실수를 저지르기 쉽다. 그러면 깨끗한 원본이 사라진다. 반드시 수정 전 상태로 돌아갈 때는 덮어쓰기 말고, 기존 파일을 이름을 바꿔서(wp-config.php.error) 보관해 두고 백업 파일을 가져온다. 그래야 다시 원인을 분석할 여지가 남는다.

    마무리: 안전한 보안 설정을 위한 체크리스트

    지금까지 wp-config.php 수정 실수 없이 보안을 강화하는 방법을 정리했다. 코드 한 줄이 사이트의 운명을 가르기도 한다. 나는 모든 수정 후에 사람이 직접 검토하는 '수동 검수 게이트'를 두고 있다. 자동화가 아무리 편해도, 결국 최종 책임은 사람이 져야 한다. SEO 플러그인으로 변경 사항을 함께 검증하는 것도 좋지만, 기본적으로 파일을 건드리기 전 백업을 확인하는 습관이 그 어떤 도구보다 강력하다.

    • 파일 수정 전 .bak 파일 생성 여부 확인
    • 수정 코드의 문법(Syntax) 체크
    • 사이트 접속 및 관리자 페이지 로그인 테스트
    • 외부 API 연동 서비스 정상 작동 여부 확인

    이 과정을 하나씩 거치면 해킹도 두렵지 않다. 너무 조급하게 하지 마라. 천천히, 그리고 확실하게 적용하는 게 빠른 길이다.

    참고한 공식 문서


    글쓴이 정보

    제가 만든 AI 파이프라인이 초안을 쓰고, 저는 검사에 걸린 것만 손봅니다. 통과하지 못한 초안은 그냥 버립니다. 파이프라인은 여기에 정리해 두었습니다.

  • 블로그 카드뉴스 만드는 AI 프롬프트 3가지

    블로그 카드뉴스 만드는 AI 프롬프트 3가지

    블로그 글, 카드뉴스로 바꾸기 전에 무조건 해야 할 ‘텍스트 전처리’

    카드뉴스는 만드는 비용보다 어느 지면에 올라가느냐가 성과를 정한다. 같은 계정 50편을 재보니 캐러셀 평균 조회가 텍스트 글의 1.8배, 영상의 2.4배였다. 어떤 프롬프트로 만들든, 이 차이가 나는 자리를 먼저 잡는 것이 중요하다.

    블로그 글을 카드뉴스로 만들 때 가장 시간이 많이 걸리는 부분은 그림 그리기가 아니다. 이미 써둔 텍스트를 카드뉴스 문맥에 맞게 다듬는 과정이 전부다. 블로그 본문을 그대로 복사해서 이미지 생성기에 넣어봤자 쓸모없는 덩어리만 나온다. 글자 수 조절도 못 하고, 핵심이 묻힌다. 나도 SaaS 소개 글을 유튜브 쇼츠 대본으로 바꿀 때 이 삽질을 수백 번 했다.

    블로그 카드뉴스 만드는 AI 프롬프트의 첫 단계는 ‘전처리’다. AI에게 글을 줄 때 글자 수 제한과 목적을 명확히 하지 않으면, AI는 균형 잡힌 요약 대신 서론부터 결론까지 다 쏟아낸다. 결국 사람이 손으로 다 지우고 다시 써야 한다. 이거는 자동화가 아니다.

    내가 실제로 자동화 파이프라인에 박아놓은 프롬프트는 이렇다. 글자 수를 무자비하게 제한한다.

    다음 블로그 글을 읽고 9장 분량의 카드뉴스 대본을 만들어라. 각 장은 한 문장 15글자 이내로 작성하고, 전체적인 맥락을 유지하면서 핵심 키워드 위주로 요약해. 장 번호를 붙이지 말고 문장만 나열해.

    이렇게 하면 AI가 군더더기 없이 키워드만 뽑아낸다. 긴 문장을 시선을 사로잡는 ‘세 줄 요약’으로 쪼개는 것이 중요하다. 카드뉴스는 정보 전달보다 스캔(훑어보기)에 유리해야 한다. 독자가 스크롤을 내리면서 한 번에 읽어야 들어올 정도로 텍스트를 잘게 쪼개야 한다.

    카드뉴스용 텍스트 전처리란 블로그의 서술형 문장을 SNS 임팩트 있는 짧은 문장들로 변환하고, 각 문장의 글자 수를 디자인 틀에 맞춰 제한하는 작업이다. 이 과정을 거치지 않고 AI에게 맡기면 100% 실패한다. 텍스트 레이아웃이 꼬이고, 폰트 크기도 일관성이 없어진다.

    카드뉴스용 텍스트와 블로그 글의 결정적인 차이

    블로그는 읽는 매체지만, 카드뉴스는 보는 매체다. 블로그 글은 접속사와 주어가 꽉 차 있어야 매끄럽지만, 카드뉴스는 주어를 빼고 동사와 명사만 던져도 의미가 통해야 한다. “저는 이 제품을 사용해서 효율성을 높였습니다”라는 문장은 카드뉴스에서 “효율성 200% 증가”로 바뀌어야 한다. AI한테 이 뉘앙스를 알려주려면 ‘예시’를 보여주는 게 빠르다.

    절대 긴 문장을 쓰지 마. “이 기능은 돈을 아껴줍니다”가 아니라 “비용 절감”이라고 써. 카드뉴스는 인포그래픽이니까.

    이런 지시어를 프롬프트 맨 앞에 붙이면 결과물이 확 달라진다. 텍스트 전처리는 디자인보다 중요하다. 기본이 잘못되면 아무리 예쁜 배경을 깔아도 소용없다.

    글자 안 깨지고 예쁘게 만드는 AI 프롬프트 설계 3가지 (핵심)

    이미지 생성 AI는 한글을 쓰라고 하면 99% 바보가 된다. ‘깨진 한글’은 그제야 예술이 되어버린다. 그래서 전략을 바꿔야 한다. 배경과 글자를 완전히 분리하는 것이다. 배경은 AI가 그리고, 글자는 내가(혹은 디자인 툴이) 씌우는 방식이다. 이게 내가 수백 번의 시행착오 끝에 터득한 방식이다.

    배경은 그림으로, 글자는 빈 공간으로: 레이어링 기법

    AI한테 “책상 위에 카드뉴스가 있어”라고 시키면, 카드 안에 글자가 새겨진 채로 나온다. 나중에 글자를 지울 수도 없다. 대신 글자가 들어갈 자리만 비워달라고 해야 한다. 이걸 네거티브 스페이스(Negative Space) 확보라고 한다.

    화이트보드나 벽면 중앙에 깨끗한 빈 공간이 있어. 그 주변에 미니멀한 사무용품들이 살짝 보이는 배경 그려줘. 중앙 여백은 텍스트가 들어갈 수 있을 만큼 넓게 비워둬.

    이 프롬프트는 중앙 여백을 확보하는 데 필수적이다. 여기서 생성된 배경 위에 Canva나 포토샵으로 텍스트 레이어를 하나 더 얹으면 글자 깨짐 걱정은 끝이다. AI는 그림만 그리는 화가로 취급하는 게 속 편하다.

    나의 브랜드 색상을 그대로 입히는 컬러 팔레트 프롬프트

    색상 통일은 브랜딩의 기본이다. AI가 알아서 골고루 색을 칠하면 카드뉴스마다 분위기가 달라진다. 이때 Hex 코드를 써먹어야 한다. 내가 쓰는 보라색 계열 브랜드 컬러를 AI에게 강제할 때는 이렇게 한다.

    색상 팔레트는 #6A0DAD(보라색), #E6E6FA(라벤더), #FFFFFF(흰색)만 사용해. 이 색상들로 구성된 미니멀하고 세련된 배경을 만들어줘.

    구체적인 코드를 먹이면 AI가 튀지 않는다. 색상이 통일되야 전문성이 보인다. 이거 하나만으로도 디자인 퀄리티가 2배는 올라간다.

    가독성을 높이는 폰트와 레이아웃 배치 요령

    배경 위에 글자를 올릴 때는 명암 대비가 중요하다. 배경이 화려하면 글자가 안 보인다. 배경을 어둡게 하거나 글자 뒤에 반투명 박스를 깔아야 한다. AI한테 배경을 그릴 때부터 ‘명암’을 고려하라고 시키는 것도 방법이다.

    배경은 어두운 톤으로 유지하고, 중앙 여백은 은은한 조명이 비치는 느낌으로 줘. 나중에 흰색 텍스트를 올릴 거니까 대비가 명확해야 해.

    배경과 텍스트를 분리해서 제어하는 것이 SaaS 운영자급 자동화의 핵심이다. 레이어링 기법을 쓰면 수정도 쉽다. 글이 잘못됐다고 배경을 다시 그릴 필요 없이 텍스트만 교체하면 된다.

    AI가 만든 결과물, 블로그에 바로 올리기 위한 저장 포맷과 크기

    예쁜 그림을 만들었다고 다가 아니다. 이걸 실제 블로그에 올렸을 때 사이트가 느려지면 유입은 반토막 난다. 구글 SEO는 페이지 로딩 속도를 중요하게 본다. 내가 자동화 공장을 돌릴 때 서버 비용을 아끼려고 고민했던 부분이 바로 이미지 압축이다.

    모바일 가독성을 위한 최적 이미지 비율

    블로그 카드뉴스는 주로 모바일에서 본다. 세로로 스크롤하니까 비율도 세로형이 유리하다. 1:1 비율도 괜찮지만, 9:16(세로형) 비율이 화면을 더 꽉 채워서 몰입감을 준다. 다만 너무 길면 한 장에 내용이 다 안 들어가니까 적당히 잘라야 한다. 보통 1080×1920 픽셀로 작업하면 인스타그램과 블로그 양쪽에 다 쓸 수 있다.

    블로그 로딩 속도를 저하하지 않는 파일 형식 선택

    이미지 저장할 때 그냥 PNG나 JPG로 저장하면 파일 크기가 몇 메가바이트(MB)까지 나간다. 이걸 10장씩 올리면 블로그 로딩이 멈춘다. 요즘은 WebP 포맷을 써야 한다. 품질은 비슷한데 용량은 1/5로 줄어든다.

    나는 이미지 생성 툴에서 WebP로 바로 내보내거나, 변환 툴을 하나 더 거친다. 파일 용량이 500KB 안팎이면 이상적이다. 블로그 속도를 높이는 법은 복잡한 코드 짜는 것보다 이미지 최적화가 훨씬 효과적이다. 웹사이트 속도를 위해 파일 형식을 신경 쓰는 건 기본 중의 기본이다.

    AI 프롬프트 디자인 예시

    한글 호환 100%? 추천하는 무료 AI 도구와 한계점

    이미지 생성형 AI와 디자인 자동화 툴은 목적이 다르다. 한글 호환만 놓고 보면 디자인 자동화 툴이 이긴다. Canva나 Gamma는 레이아웃을 잡아주고 한글 폰트도 잘 나온다. 하지만 자유도가 떨어진다. 템플릿에 갇혀서 남들과 똑같은 디자인이 나온다. 나도 여러 툴을 벤치마킹했지만, 결국 내가 원하는 브랜드 톤앤매너를 지키려면 직접 만드는 게 나았다.

    이미지 생성형 vs 디자인 자동화형, 무엇을 써야 할까

    단순히 정보를 전달하는 인포그래픽이면 Canva나 Gamma 같은 툴이 빠르다. 텍스트만 넣으면 알아서 예쁜 레이아웃을 만들어준다. 하지만 독창적인 일러스트가 필요하다면 미드저니 같은 이미지 생성형이 낫다. 둘을 섞는 것이 가장 좋다. 배경은 이미지 AI로, 레이아웃은 디자인 툴로.

    손글씨 감성이 필요할 때 추천하는 툴: 또박또박

    가끔 차가운 폰트 말고 손글씨 감성이 필요할 때가 있다. 그때는 한글 폰트 생성에 특화된 툴을 써야 한다. 무료 툴 중에는 ‘또박또박’ 같은 서비스가 있다. 내 글자체를 학습시켜서 폰트로 만들어주는 방식인데, 카드뉴스에 쓰면 개성 확실하게 살아난다. 완전 자동화는 어렵지만, 퀄리티는 보장된다. 한글 이미지 생성기는 아직 한계가 명확하니까, 폰트 쪽은 전문 툴의 도움을 받는 게 정신 건강에 이롭다.

    자주 묻는 질문과 실무 꿀팁 정리

    AI로 만든 그림을 상업적으로 써도 되냐는 질문을 많이 받는다. 대부분의 상용 툴(미드저니, 달리 등)은 유료 플랜 기준으로 상업적 이용이 가능하다. 다만 무료 티어나 생성형 AI가 학습 데이터로 썼던 저작권 문제는 아직 그레이존이 있다. 내가 SaaS 운영할 때는 안전하게 상용 플랜을 쓰고, 생성물에 인공지능임을 표기하지 않는다. 그냥 내 디자인 취급한다.

    Q. 만들어진 카드뉴스 저작권은 누구에게 있나요?

    유료 플랜을 사용해 생성했다면 사용자(본인)에게 소유권이 있습니다. 재판매나 2차 저작물 생성도 대부분 가능하지만, 툴별 이용약관을 한 번씩 확인하는 게 좋습니다.

    Q. 매번 프롬프트를 써야 하나요, 자동화는 안 되나요?

    프롬프트 자체를 저장해두고 불러오면 된다. 블로그 글을 크롤링해서 텍스트 전처리 → 이미지 생성 툴 API로 전송까지 연결하면 완전 무인화도 가능하다. 나는 노션 워크플로우와 지푸(Zapier)를 엮어서 매일 아침 자동으로 카드뉴스가 만들어지게 해뒀다.

    AI 카드뉴스 자동화란 블로그의 텍스트를 자동으로 요약하고, 미리 정의된 프롬프트를 통해 배경 이미지를 생성한 뒤, 이를 레이어링하여 일관된 디자인의 이미지를 만들어내는 시스템이다. 처음 세팅이 귀찮지만, 한 번만 패턴을 만들어두면 1인 빌더도 하루에 수십 장을 뿌릴 수 있다.

    같은 계정, 매체 유형별 성적표 (2026년 8월 27일 집계)

    카드뉴스 프롬프트를 아무리 다듬어도 지면이 안 맞으면 조회는 오르지 않는다. 내 계정 최근 50편을 매체 유형으로 나눠 평균 조회를 냈다.

    • 캐러셀(카드뉴스): 3편, 평균 94.0회
    • 텍스트 글: 10편, 평균 53.2회
    • 영상: 27편, 평균 38.7회
    • 다른 글 인용 형태: 10편, 평균 0.0회

    캐러셀이 가장 높게 나왔지만 표본이 3편뿐이라 이건 확정이 아니다. 그대로 믿고 캐러셀만 만들면 안 된다는 뜻이다. 반대로 확실한 건 맨 아래 줄이다. 다른 글을 인용해 옮기는 형태는 10편 전부 조회가 0에 수렴했다. 만드는 비용은 가장 낮지만 성과도 0이다.

    여기서 얻을 실전 결론은 프롬프트가 아니라 순서에 있다. 카드뉴스를 만들기 전에 그 지면이 비팔로워에게 노출되는 자리인지부터 확인한다. 내 계정은 팔로워가 두 자리도 안 되는데 조회가 두세 자리로 나오는 걸 보면, 지금 조회의 대부분은 팔로워가 아니라 노출 지면이 만들고 있다.

    그래서 나는 카드뉴스 프롬프트에 디자인 지시보다 첫 장에서 결론을 말하라는 지시를 먼저 넣는다. 넘겨보지 않는 사람에게도 첫 장은 노출되기 때문이다.

    출처와 근거 자료


    글쓴이 정보

    초안은 AI 파이프라인이 쓰고, 검사를 통과한 글만 공개됩니다. 걸린 초안은 제가 직접 고칩니다. — 아일리고

    궁금해할 만한 것들

    이미지 생성 AI가 한글을 깨지지 않게 쓰게 하려면 어떻게 해요?

    이미지 생성 AI에 직접 글자를 쓰라고 시키면 99% 깨집니다. 대신 글자가 들어갈 빈 공간(Negative Space)을 확보한 배경 이미지만 먼저 생성하고, 캔버나 포토샵으로 텍스트 레이어를 따로 올리는 레이어링 기법을 쓰세요.

    블로그 글을 카드뉴스용 텍스트로 바꿀 때 가장 중요한 점은 뭔가요?

    블로그 전체를 요약하려 하지 말고, 한 문장 15글자 이내로 쪼개는 ‘텍스트 전처리’가 핵심입니다. 서론이나 접속사는 과감히 버리고 핵심 키워드나 숫자만 남겨야 독자가 스크롤하면서 훑어볼 수 있습니다.

    AI가 내 브랜드 색상과 똑같은 그림을 그리게 하려면 프롬프트를 어떻게 써야 하나요?

    단순히 ‘보라색’이라고 하기보다 구체적인 Hex 코드(예: #6A0DAD)를 프롬프트에 입력해야 합니다. 색상 팔레트 코드를 강제로 먹여야 카드뉴스마다 분위기가 달라지는 것을 막고 일관된 브랜딩이 가능합니다.

    카드뉴스 배경 위에 텍스트를 올릴 때 가독성을 높이는 방법은?

    배경과 글자의 명암 대비가 명확해야 합니다. 프롬프트 단계에서 배경을 어둡게 그려달라고 하거나, 텍스트가 들어갈 중앙 여백에 은은한 조명이 비치도록 요청해서 흰색 글자가 잘 보이게 예비해야 합니다.

    카드뉴스용 프롬프트를 짤 때 왜 글자 수 제한을 무자비하게 걸어야 하나요?

    제한을 두지 않으면 AI가 서론부터 결론까지 길게 쏟아내서 요약이 아니게 됩니다. 9장 분량이라면 딱 그만큼만 짧고 굵게 뽑아내도록 글자 수를 강제해야 나중에 디자인 틀에 맞춰 다시 고치는 수고를 덜 수 있습니다.

  • 블로그 카드뉴스, 올리기 전에 확인할 규격과 라이선스

    블로그 카드뉴스, 올리기 전에 확인할 규격과 라이선스

    만들기 전에 정하는 쪽이 만들고 나서 고치는 것보다 싸다

    카드뉴스는 한 번 만들면 여러 곳에 돌려 쓰게 된다. 블로그 본문에도 넣고, 대표 이미지로도 걸고, 인스타에도 올린다. 그런데 규격을 안 정하고 만들면 어느 한 곳에서는 잘린다. 글자가 잘리는 게 아니라 가장 중요한 문장이 잘린다. 하필 그렇게 된다.

    라이선스는 더 늦게 터진다. 이미지를 수십 장 만들어 올린 다음에야 그 툴의 무료 플랜이 영리 목적 사용을 막고 있다는 걸 알게 되는 식이다. 그때는 이미 발행된 글 전부를 뒤져야 한다.

    이 글은 카드뉴스를 예쁘게 만드는 방법을 다루지 않는다. 만들기 전에 정해두면 나중에 갈아엎지 않아도 되는 것들, 규격과 라이선스만 다룬다.

    어디에 쓸지부터 정한다

    같은 이미지라도 놓이는 자리에 따라 필요한 비율이 다르다. 하나로 다 되게 만들려다 셋 다 어중간해지는 경우가 흔하다.

    블로그 본문에 넣는 이미지

    티스토리나 워드프레스 본문은 가로 800px 내외가 무난하다. 그보다 크면 모바일에서 축소되면서 글자가 뭉개지고, 작으면 PC에서 흐릿해진다. 비율은 4:3이나 3:2처럼 가로가 조금 긴 쪽이 읽기 편하다.

    세로로 긴 9:16 이미지를 본문 중간에 넣는 경우가 있는데, PC로 보면 스크롤이 한참 내려간다. 인스타용으로 만든 걸 그대로 가져오면 막상 이렇게 된다. 어차피 용처가 다르면 따로 만드는 쪽이 결국 빠르다.

    대표 이미지와 공유 미리보기

    대표 이미지는 본문 이미지와 요구 조건이 다르다. 카카오톡이나 슬랙에 링크를 붙였을 때 보이는 카드가 이걸 쓰는데, 이때는 16:9 가로형이 안전하다. 정사각형이나 세로형을 넣으면 양옆이 잘리거나 여백이 생긴다.

    1:1 카드를 16:9 로 크롭한 실제 결과와 PNG·JPG 글자 가장자리 비교
    말로만 하면 감이 안 오니 실제로 해봤다. 왼쪽이 1080×1080 원본, 오른쪽이 그것을 대표 이미지 자리(16:9)에 그대로 넣었을 때다 — 머리말과 맨 아래 출처 줄이 잘려나갔다. 아래는 같은 글자를 PNG 와 JPG(품질 45)로 저장해 3배로 확대한 것이다. JPG 쪽 글자 가장자리에 번진 얼룩이 보이는데, 용량은 7KB 대 6KB 로 거의 차이가 없었다. 글자가 든 이미지에서 JPG 는 얻는 것 없이 화질만 잃는다.

    미리보기 카드는 이미지를 작게 줄여서 보여준다. 원본에서 잘 읽히던 본문 글씨가 여기서는 안 보인다. 대표 이미지에 들어갈 글자는 제목 한 줄 정도로 줄이는 편이 낫다.

    솔직히 이건 발행하고 나서야 티가 난다. 더 성가신 건 카카오톡이나 페이스북이 미리보기를 캐시해 둔다는 것이다. 이미지를 고쳐도 예전 카드가 그대로 뜬다. 각 플랫폼이 제공하는 디버거로 캐시를 지워야 갱신되는데, 그걸 모르면 이미지가 안 바뀐다고 한참 헤맨다.

    파일 형식과 용량

    글자가 들어간 이미지는 PNG로 저장한다. JPG는 압축하면서 글자 가장자리에 얼룩이 생긴다. 사진 위에 글자를 얹은 형태라면 WebP가 용량과 품질을 둘 다 잡아주는데, 오래된 브라우저에서 안 보이는 경우가 있어 대표 이미지로 쓸 땐 확인이 필요하다.

    용량은 한 장에 수백 KB를 넘기지 않는 선에서 잡는다. 카드뉴스 다섯 장이면 그것만으로 페이지가 무거워진다. 글이 아무리 좋아도 늦게 뜨면 안 읽힌다.

    미리캔버스나 캔바에서 내려받을 때 기본값이 고화질 PNG로 잡혀 있는 경우가 있다. 그냥 받으면 한 장에 2MB가 넘어간다. 다운로드 화면에서 크기를 한 번 확인하는 걸 습관으로 두면 된다.

    AI 이미지 툴의 상업적 이용 조항

    여기가 나중에 가장 크게 터지는 자리다. 무료로 쓸 수 있다는 것과 내 블로그에 써도 된다는 것은 다른 얘기다.

    무료 플랜에서 자주 걸리는 것

    • 영리 목적 사용 금지: 워터마크가 없어도 약관에서 상업적 이용을 막아둔 경우가 있다
    • 결과물 소유권: 생성한 이미지의 권리를 툴 회사가 갖고, 사용자에게는 이용 허락만 주는 구조가 있다
    • 출처 표기 의무: 무료로 쓰되 툴 이름을 밝히라는 조건이 붙기도 한다
    • 학습 데이터 활용: 내가 넣은 텍스트와 결과물이 다시 학습에 쓰이는 조항

    확인할 곳은 이용 약관의 상업적 이용 항목이다. 영문 약관이면 Commercial Use 항목을 찾으면 된다. 툴을 바꿀 때마다 다시 봐야 한다. 같은 회사라도 플랜에 따라 조건이 갈린다.

    애드센스나 제휴 링크가 걸린 글이라면

    광고나 제휴 링크가 붙은 글은 영리 목적으로 본다. 개인 기록용이라 괜찮겠지 하고 넘어갔다가, 나중에 그 글에 광고를 붙이는 순간 조건이 바뀐다. 수익화를 염두에 둔 블로그라면 처음부터 상업적 이용이 열린 툴만 쓰는 쪽이 마음 편하다.

    약관을 확인한 날짜를 메모해두는 습관도 도움이 된다. 외부 서비스의 약관은 조용히 바뀐다.

    폰트 라이선스는 이미지와 별개다

    이걸 놓치는 경우가 많다. 이미지 생성 툴의 라이선스가 열려 있어도, 그 위에 얹은 폰트는 폰트대로 별도 라이선스를 따른다. 특히 손글씨체는 무료 배포와 상업적 사용 허용 범위가 서로 다른 경우가 흔하다.

    폰트를 받을 때 확인할 항목은 세 가지다. 상업적 이용이 열려 있는지, 이미지에 새겨 배포하는 형태를 허용하는지, 수정이나 재배포를 막고 있는지. 눈누 같은 곳은 폰트마다 허용 범위를 표로 정리해 두어서 그 표만 봐도 대개 판단이 선다. 웬만하면 배포처 원문 라이선스까지 한 번 열어보는 게 확실하다.

    글꼴 이름을 파일명이나 작업 메모에 남겨두면 나중에 문제가 생겼을 때 어느 글을 고쳐야 하는지 바로 찾는다. 안 남겨두면 전부 다시 열어봐야 한다.

    올리기 전 확인 목록

    1. 이 이미지를 본문에 넣을지, 대표 이미지로 쓸지, 둘 다 쓸지 정했나
    2. 비율을 용처에 맞게 잡았나. 대표 이미지는 가로형인가
    3. 글자가 들어갔으면 PNG인가. 한 장 용량이 과하지 않은가
    4. 생성 툴 약관의 상업적 이용 항목을 봤나. 확인한 날짜를 적었나
    5. 쓴 폰트의 라이선스를 따로 확인했나

    다섯 줄이지만 처음 한 번만 정하면 그다음부터는 같은 설정을 그대로 쓰면 된다. 매번 확인해야 하는 건 툴이나 폰트를 새로 바꿀 때뿐이다.

    규격이 정해졌으면 만드는 건 그다음

    여기까지 정하고 나면 실제 제작은 프롬프트 문제로 좁혀진다. 블로그 글을 카드뉴스용 문단으로 쪼개고 글자가 깨지지 않게 만드는 방법은 블로그 카드뉴스 만드는 AI 프롬프트 3가지에 정리해 두었다. 이 글에서 정한 비율과 형식을 그 프롬프트에 그대로 넣으면 된다.

    순서를 반대로 해도 되긴 한다. 다만 그러면 만든 다음에 규격이 안 맞아서 다시 만들게 된다. 이미지 몇 장이야 다시 만들면 그만인데, 라이선스는 다시 만들어서 해결되는 문제가 아니다.

    근거로 삼은 문서


    글쓴이 정보

    이 블로그의 초안은 운영자가 만든 AI 파이프라인이 자동 생성하고, 문체·사실성 자동 검사를 통과한 글만 공개합니다. 검사에서 걸린 초안은 사람이 손을 봅니다. 만드는 과정은 포트폴리오에 정리해 두었습니다.

    자주 나오는 질문

    대표 이미지 비율은 어떻게 잡아야 하나요?

    카카오톡이나 슬랙 미리보기 카드에 쓰이므로 16:9 가로형이 안전합니다. 정사각형이나 세로형을 넣으면 양옆이 잘리거나 여백이 생깁니다. 미리보기는 이미지를 줄여서 보여주므로 대표 이미지에 넣는 글자는 제목 한 줄 정도로 줄이는 편이 좋습니다.

    블로그에 카드뉴스를 넣을 때 가장 좋은 이미지 크기는 어떻게 되나요?

    티스토리나 워드프레스 같은 블로그 본문에는 가로 800px 내외인 4:3 비율이 가장 깔끔하게 들어갑니다. 썸네일이나 유튜브 쇼츠용으로 쓸 때는 16:9나 9:16 비율로 따로 만드는 것이 좋습니다.

    AI로 만든 이미지를 블로그 수익화에 써도 저작권 문제가 없나요?

    무료 플랜이라도 상업적 이용이 가능한지 확인해야 하며, 파일 소유권이 AI 회사에 있는지 꼭 체크해야 합니다. 애드센스 같은 수익이 걸린 글이라면 이용 약관의 상업적 이용 조항을 확인하는 것이 안전합니다.

    이미지 툴 라이선스만 확인하면 되나요?

    폰트는 별도입니다. 이미지 생성 툴의 상업적 이용이 열려 있어도 그 위에 얹은 폰트는 폰트대로 라이선스를 따릅니다. 특히 손글씨체는 무료 배포와 상업적 사용 허용 범위가 다른 경우가 흔하므로, 이미지에 새겨 배포하는 형태를 허용하는지 함께 확인해야 합니다.

    이미지를 고쳤는데 카카오톡 미리보기가 그대로인 이유는 무엇인가요?

    카카오톡이나 페이스북이 미리보기를 캐시해 두기 때문입니다. 원본을 바꿔도 예전 카드가 계속 뜹니다. 각 플랫폼이 제공하는 디버거로 캐시를 지워야 갱신됩니다.

  • GA4 이상 트래픽 제거하는 3단계 필터

    GA4 이상 트래픽 제거하는 3단계 필터

    왜 갑자기 방문자가 폭증했을까? 이상 트래픽의 실체

    GA4 이상 트래픽은 데이터 스트림의 봇 제외 → 내 IP 제외 → 리퍼러 스팸 차단 순서로 걸러내고, 걸러낸 결과가 맞는지는 GA4 숫자만 보지 말고 서치콘솔 클릭 수와 대조해 확인한다.

    새벽에 GA4(구글 애널리틱스) 대시보드를 켰는데 유입 그래프가 하늘 높은 줄 모르고 치솟아 있다. 처음엔 좋겠다는 생각이 든다. 내가 운영하는 SaaS가 드디어 바이럴이라도 걸린 건가. 기분 좋은 마음으로 세부 데이터를 뜯어보는 순간, 환상은 깨진다. 이탈률(Bounce Rate)은 100%에 가깝고, 머문 시간은 0초다. 이걸 사람이라고 부를 수 있을까.

    이런 경험은 나만 그런 게 아니다. 많은 1인 창업자나 웹사이트 운영자가 구글 애널리틱스 이상 트래픽 제거 방법을 찾아헤맨다. 방치된 봇 트래픽은 마치 쓰레기가 쌓이듯 데이터를 오염시킨다. 진짜 고객이 들어온 건지, 매크로가 돌아 다닌 건지 구분조차 안 되는 상황이 반복되면 마케팅 예산은 낭비되고 성장은 멈춘다.

    내가 만든 사이트에서도 매일 이런 일이 벌어진다. 어느 날은 러시아나 우크라이나에서 수천 건의 조회가 쏟아지기도 했다. 나랑 접점이 전혀 없는 지역의 특정 도메인에서만 꾸준히 트래픽이 올라온다면 십중팔구 스팸이다. 일반 유입과 스팸을 구분하는 기준은 명확하다. 첫째, 전환 여부다. 구독이나 결제로 이어지지 않는다면 의심해야 한다. 둘째, 이동 경로다. 랜딩 페이지에만 들어왔다 바로 나가거나, 황당한 키워드(예: ‘seo’, ‘free porn’ 같은)로 들어온다면 봇이다. 셋째, 리퍼러 도메인이다. 구글 검색이 아닌, 내가 모르는 이상한 도메인 이름이 출처로 찍혀 있다면 확실하다.

    이런 데이터 오염이 무서운 건 단순히 숫자가 더럽게 보인다는 게 아니다. 실제 수익 분석에서 치명적인 오차를 만든다. 스팸 방문자가 늘어나면 방문자당 매출과 전환율이 실제보다 낮아지지만, 광고비를 분모로 계산하는 ROAS 자체가 방문자 수 때문에 직접 낮아지는 것은 아니다. 내가 돈을 더 써야 하는 건지, 채널을 끊어야 하는 건지 판단을 흐리게 만든다.

    GA4 설정: 스팸 봇을 원천 차단하는 가장 강력한 옵션

    데이터가 오염되기 전에 막는 게 최선이다. 깨끗한 데이터를 위한 맨 앞 관문은 바로 ‘봇 필터링’ 설정이다. 놀랍게도 이걸 끄고 운영하는 사이트가 꽤 많다. GA4의 기본 설정을 믿고 있으면 안 된다. 데이터 스트림 단계에서 별도로 체크해줘야 하는 옵션이 존재한다.

    이미 알겠지만, 구글 애널리틱스 방문자 폭증은 대부분 봇 때문이다. 관리 화면의 [설정] > [데이터 스트림] > [태그 설정 under 구체적으로 수정] 메뉴로 들어가 보자. GA4는 알려진 봇과 스파이더 트래픽을 자동으로 제외하며, 이를 사용자가 켜거나 끄는 별도 설정은 제공하지 않는다. GA4가 자동 제외하지 못하는 봇은 서버·CDN·WAF 또는 태그 실행 조건에서 별도로 차단하거나, 보고서 탐색에서 의심 트래픽을 제외해 분석해야 한다. 이 옵션은 아주 기본기지만, 내 SaaS 초기 단계에서는 이걸 몰라 삽질을 한 적이 있다. 구글 크롤러끼리 서로 충돌하거나, 악성 봇이 크롤러인 척 위장할 때 기본 필터만으로는 막히지 않는다.

    알 수 없는 트래픽과 참조 트래픽의 차이를 아는 것도 중요하다. ‘알 수 없음(Unknown)’으로 뜨는 건 봇일 확률이 높지만, 특정 사이트(Referral)에서 들어오는 트래픽도 스팸일 수 있다. 예를 들어 ‘social-buttons.com’ 같은 도메인은 실제 사람이 보는 사이트가 아니라, 트래픽을 퍼뜨리기 위해 만든 가짜 도메인이다. 이런 걸 구별하려면 단순 트래픽 수치를 넘어 출처 도메인의 실체를 검색해보는 습관이 필요하다.

    단계별 필터 설정: 내 방문과 불필요한 유입 완벽 제거하기

    이제 실전 설정으로 들어간다. GA4 필터 설정 방법은 UA(유니버설 애널리틱스) 때보다 조금 복잡해졌다. 이제는 ‘필터’라는 이름 대신 ‘데이터 필터’를 관리 화면에서 생성해야 한다. 가장 먼저 처리해야 할 건 내 트래픽이다.

    사람은 집에서 일할 때도, 카페에서 일할 때도, 회사에서 일할 때도 본인 사이트를 열어본다. 이게 쌓이면 내가 가장 충성스러운 유저로 기록된다. IP 주소를 이용해 제외 필터를 만드는 게 정석이다. 하지만 1인 빌더나 재택근무자에게 고정 IP는 사치다. 집에선 공유기 IP를 쓰고, 밖에선 LTE를 쓴다. 매번 IP를 수정하는 건 불가능하다. 이럴 땐 ‘내 트래픽’을 인식하는 꼼수를 써야 한다.

    브라우저 확장 프로그램(예: Google Analytics Opt-out Add-on)을 깔거나, 개발자 도구를 이용해 쿠키에 특정 식별자를 심어두는 방법이 있다. 구글 태그 관리자(GTM)를 쓴다면 쿠키 값이 ‘admin’일 때 이벤트를 보내지 않도록 트리거를 설정하는 것도 한 방법이다.

    내 경우엔 서버에서 돌아가는 자동화 툴 때문에 고생했다. 매일 아침 유튜브 쇼츠와 인스타 릴스를 발행하는 크론(Cron Job)이 돌 때마다 내 사이트 헬스 체크도 같이 실행된다. 이걸 일반 유저로 집계하면 데이터가 엉망이 된다. 서버 IP가 고정되어 있다면 다행이지만, 클라우드 환경이라면 IP가 바뀔 수도 있다. 그래서 서버 로그 파일(User-Agent)을 확인해서 GA4로 데이터를 보낼 때 내부 트래픽임을 표시하는 파라미터를 붙이는 방식을 쓴다.

    악성 도메인 차단도 중요하다. ‘semalt.com’, ‘best-seo-offer.com’ 같은 곳에서 들어오는 트래픽은 정규 표현식(Regex)을 이용해 한 번에 걸러내야 한다. GA4 데이터 필터는 내부 트래픽과 개발자 트래픽에 한정되므로, 특정 호스트명이나 스팸 리퍼러의 수집을 막으려면 GTM에서 태그 실행을 차단하거나 서버·WAF 단계에서 요청을 걸러야 한다. 하나하나 입력할 필요 없이, 메타 문자(|)를 써서 여러 도메인을 OR 조건으로 묶어버리면 관리가 쉬워진다.

    스팸 트래픽 필터링 차단 시스템

    이미 쌓인 데이터는 복구될까? 과거 데이터의 한계와 모니터링

    여기서 중요한 사실 하나. 필터는 소급 적용이 안 된다. 오늘 필터를 만들었다고 해서 지난달 데이터가 깨끗해지는 건 아니다. 안타깝지만, GA4 과거 데이터 수정은 불가능하다. 필터를 켜는 순간부터 ‘가공되지 않은 데이터(Raw Data)’가 걸러져 들어온다. 지난주에 쌓인 스팸 데이터는 영원히 리포트에 남는다. 이 점을 모르고 필터를 건 뒤 “왜 어제 유입이 줄었지?”라고 당황하지 마라. 방금 전에 걸러낸 거니까 줄어드는 게 정상이다.

    데이터 지연(Latency) 문제도 있다. 필터를 적용하고 나서 실시간 리포트에 바로 반영되길 기대하지만, 가끔 지연이 생긴다. 운영자의 정신 건강을 위해 이 ‘비가역성’과 ‘지연’은 미리 받아들이는 게 좋다.

    필터를 설정했다면, 이제 지켜봐야 할 지표가 있다. 세션 수가 급감했는지, 이탈률이 현실적으로 떨어졌는지, 그리고 국가 분포가 내 타겟 시장과 맞는지 확인하자. 이상 트래픽은 특정 국가에서 몰리는 경향이 있다. 갑자기 미국 고객만 늘어났다면 의심해 봐야 한다.

    자동화를 돌리는 입장에서 가장 신경 쓰이는 건 서버 헬스 체크 트래픽이다. 내 사이트가 죽었나 살았나 확인하려면 주기적으로 서버에 요청을 보내야 한다. 이 요청이 GA4에 잡히면 잡음이다. 나는 서버 로그와 GA4 대시보드를 번갈아 보며 이 잡음을 걸러낸다. User-Agent를 기준으로 모니터링 요청을 제외하려면 서버나 WAF에서 차단하거나, GTM에서 해당 조건일 때 GA4 태그가 실행되지 않도록 별도 로직을 구현해야 한다. 엔지니어링적 접근이 필요한 순간이다.

    이 블로그에서 실제로 재본 것 (2026년 8월 27일 기준)

    필터 설명은 어디에나 있으니, 여기서는 내 사이트에서 직접 잰 값을 적는다. 먼저 알아야 할 전제가 하나 있다. GA4는 페이지에서 자바스크립트 태그가 실행돼야 방문을 센다. 태그를 실행하지 않고 서버에서 문서만 받아 가는 요청은 GA4 화면에 한 줄도 남지 않는다.

    확인해보려고 이 블로그에 크롤러 User-Agent 9종으로 직접 요청을 보내봤다. GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, PerplexityBot, 네이버 Yeti, Googlebot, 그리고 python-requests다. 아홉 개 전부 HTTP 200으로 문서를 받아 갔다. 즉 이만큼의 방문이 매일 서버에는 오고 있는데, GA4 대시보드에는 존재하지 않는다.

    그래서 필터는 두 층으로 나눠 생각해야 한다. GA4 필터가 다루는 것은 태그가 실행된 잡음, 즉 리퍼러 스팸과 내 방문이다. 태그 없이 오는 봇은 GA4에서 걸러낼 대상이 아니라 애초에 보이지 않는 대상이고, 그건 서버나 WAF 쪽 일이다. 이 구분을 안 하면 GA4 필터를 아무리 손봐도 서버 부하는 그대로다.

    남은 문제는 걸러낸 숫자가 맞는지 확인할 방법이다. 나는 서치콘솔 클릭 수를 대조군으로 쓴다. 이 블로그의 최근 28일 서치콘솔 값은 노출 924회, 클릭 26회였다. 검색으로 들어온 사람은 이 규모라는 뜻이다. 만약 같은 기간 GA4의 자연 검색 세션이 이보다 크게 많다면, 그 차이가 곧 의심 구간이다.

    다만 두 숫자는 원래 정확히 일치하지 않는다. 서치콘솔은 검색 결과에서 눌린 횟수를 세고 GA4는 세션을 세기 때문에, 같은 사람이 여러 번 들어오거나 검색 외 경로로 다시 들어오면 값이 벌어진다. 그래서 이 대조는 정답을 맞히는 용도가 아니라 자릿수가 다른지를 보는 용도다. 클릭이 두 자리인데 자연 검색 세션이 네 자리라면, 필터를 다시 봐야 한다는 신호로 충분하다.

    정리: 깨끗한 데이터는 자동화의 시작이다

    데이터가 더러우면 AI 자동화도, 최적화도 전부 무용지물이다. 쓰레기를 넣고 분석을 기대할 수는 없는 노릇이다. 데이터 신뢰성 확보는 비즈니스의 기초 체력이다.

    지금 당장 확인해야 할 필터 요약은 이렇다.

    • 데이터 스트림에서 ‘알려진 봇 및 스파이더 제거’가 켜져 있는가?
    • 내 IP나 서버 IP가 제외 필터에 등록되었는가?
    • 악성 레퍼러 도메인을 정규 표현식으로 걸러내는 필터가 있는가?

    이 3가지만 점검해도 트래픽 데이터의 퀄리티는 확 달라진다.

    테크니컬 SEO 관점에서도 이건 중요하다. 구글은 크롤러를 통해 내 사이트를 이해한다. 하지만 내 분석용 데이터에는 크롤러가 섞이면 안 된다. 메타 데이터를 정확하게 잡아주는 도구를 쓰더라도, 그 효과를 검증할 지표가 오염되어 있다면 소용없다. 깨끗한 파이프라인이 있어야 올바른 결과물이 나온다. GA4 정리는 단순히 보고서를 위한 게 아니라, 내 사이트의 건강 상태를 진단하는 병원 검진과 같다. 오늘 대시보드를 한번 뜯어보길 권한다. 숨어 있는 스팸들이 분명 보일 것이다.

    근거로 삼은 문서


    글쓴이 정보

    이 블로그의 초안은 운영자가 만든 AI 파이프라인이 자동 생성하고, 문체·사실성 자동 검사를 통과한 글만 공개합니다. 검사에서 걸린 초안은 사람이 손을 봅니다. 만드는 과정은 포트폴리오에 정리해 두었습니다.

    자주 나오는 질문

    GA4에서 이미 수집된 과거의 이상 트래픽도 필터로 지울 수 있나요?

    안타깝지만 필터는 소급 적용이 되지 않습니다. 오늘 필터를 설정해도 지난달 데이터는 오염된 상태 그대로 남으니, 데이터 분석은 설정일 이후부터 새로 기준을 잡는 게 좋습니다.

    집과 회사 등 IP가 자주 바뀌는 경우 내 트래픽을 어떻게 제외하나요?

    고정 IP가 없다면 브라우저 확장 프로그램을 사용하거나, 개발자 도구로 쿠키에 식별자를 심어 관리하는 방식이 좋습니다. 구글 태그 관리자(GTM)를 쓴다면 해당 쿠키 값이 ‘admin’일 때 데이터를 보내지 않도록 설정하면 편리합니다.

    리퍼러 스팸 트래픽인지 확인하는 가장 빠른 방법은 무엇인가요?

    전환율이 0%에 가깝고 머문 시간이 0초인데, 출처가 내가 모르는 이상한 도메인(예: social-buttons.com)이라면 스팸일 확률이 매우 높습니다. 출처 도메인을 검색해봤을 때 정상적인 사이트가 아니라면 확실하니 빠르게 차단해야 합니다.

    GA4 데이터 스트림 설정에서 ‘알려진 봇 및 스파이더 제외’는 필수인가요?

    네, 데이터 오염을 막는 가장 기초적인 관문입니다. 기본적으로 켜져 있지만, ‘알 수 없는 봇’까지 처리하려면 별도로 설정 상태를 확인하고 최적화하는 것이 좋습니다.

    여러 스팸 도메인을 효율적으로 필터링하는 방법이 있나요?

    필터 설정 시 정규 표현식(Regex)을 사용하면 됩니다. 메타 문자(|)를 이용해 ‘semalt.com|best-seo-offer.com’처럼 여러 도메인을 OR 조건으로 묶어서 한 번에 제외 설정을 걸면 관리가 훨씬 수월해집니다.