n8n 자동화, 비개발자 마케터가 직접 써보고 느낀 현실적인 후기
마케터들 사이에서 유행하는 n8n 자동화, 비개발자가 직접 써보고 느낀 현실적인 장단점과 필요한 학습량을 정리한 솔직한 후기입니다.

목차
세 줄로 먼저 읽기
이번 방문에서 한 편은 바로 볼 수 있습니다.
n8n을 알게 된 계기
2026년 초부터 마케터 커뮤니티와 SNS에서 유독 자주 보이는 키워드가 있었습니다. n8n 셀프호스팅. "Claude한테 시키니까 서버 세팅부터 워크플로우까지 다 만들어줌", "ChatGPT로 n8n 자동화 뚝딱" 같은 글들이 타임라인을 채우기 시작했습니다. 처음에는 또 하나의 유행이려니 했는데, 글을 올리는 사람들이 저처럼 코딩을 본업으로 하지 않는 마케터나 기획자라는 점이 눈에 걸렸습니다.
n8n은 여러 서비스의 작업 단계를 연결해 반복 실행하는 자동화 도구입니다. 노드(node)는 자료 읽기나 메시지 만들기 같은 한 단계이고, 이를 연결한 작업 흐름을 워크플로(workflow)라고 합니다. 셀프호스팅은 프로그램을 내 컴퓨터나 직접 관리하는 서버에 설치해 운영하는 방식입니다.
저는 마케팅과 데이터 분석을 업으로 하고 있고, 개발은 할 줄 모릅니다. 데이터베이스에서 자료를 조회하는 언어인 SQL 정도는 업무에서 쓰지만 프로그래밍 언어를 다루는 것과는 거리가 먼 사람입니다. 그런 제가 관심을 가진 이유는 단순했습니다. 반복 작업이 너무 많았기 때문입니다. 웹사이트 이용을 분석하는 Google Analytics 4(GA4)에서 매주 데이터를 뽑아 정리하고, 상담이나 구매에 관심을 보인 사람의 정보인 리드를 시트에 옮기고, 블로그가 발행되면 슬랙에 알리는 일들. 하나하나는 별것 아닌데 쌓이면 하루의 상당 부분을 잡아먹습니다.
"비개발자도 AI 도움받으면 할 수 있다"는 말에 솔직히 반신반의했지만, 직접 해보지 않으면 판단할 수 없다고 생각해서 시작했습니다. 결론부터 말하면, 맞는 말이기도 하고 틀린 말이기도 합니다.
첫인상은 꽤 괜찮았다
셀프호스팅이 유행이라고는 하지만, 저는 일단 n8n Cloud부터 시작했습니다. 서버 세팅에서 막혀서 정작 도구를 써보지도 못하는 상황은 피하고 싶었기 때문입니다. Cloud는 n8n 측에서 운영하는 환경이라 제 서버를 준비하지 않아도 됐습니다. 체험 기간 이후에는 요금제와 실행량 조건을 확인해야 합니다. 이 글을 이해하려고 지금 구독할 필요는 없습니다.
처음 워크플로우 에디터를 열었을 때 든 생각은 "생각보다 깔끔하다"였습니다. 노드를 드래그해서 연결하는 방식이 직관적이고, 각 노드가 무슨 역할을 하는지 아이콘과 이름만 봐도 대충 감이 옵니다. Google Sheets 노드를 끌어다 놓고, 슬랙 노드를 연결하고, 중간에 데이터를 가공하는 노드를 넣는 식입니다. 제 경우 간단한 워크플로우 하나를 만드는 데 30분이 채 걸리지 않았습니다. 이 시간은 당시 제 작업 기준이며 처음 쓰는 분의 예상 소요 시간은 아닙니다.
이때까지만 해도 "이거 정말 쉬운데?"라는 생각이 들었습니다. 기본 제공되는 템플릿도 많고, 노드 설정도 드롭다운에서 선택하는 방식이라 코드를 직접 쓸 일이 거의 없었습니다. 문제는 이 단계를 벗어나면서부터 시작됩니다.
실제로 도움이 된 자동화들
어려운 이야기를 하기 전에, 실제로 만들어서 잘 쓰고 있는 워크플로우부터 소개하겠습니다. 이것들이 돌아가는 것을 보면 n8n을 시작하길 잘했다는 생각이 드는 것도 사실이니까요.
첫 번째는 GA4 주간 리포트 슬랙 자동 발송입니다. API는 프로그램끼리 요청과 응답을 주고받는 접점입니다. 제 흐름은 매주 월요일 아침 9시에 GA4 API를 호출해서 지난주 핵심 지표(세션 수, 전환율, 유입 채널별 트래픽)를 가져오고, 보기 좋게 정리한 뒤 슬랙 채널에 보내줍니다. 실제 보고에서는 기간과 시간대를 맞추고, 세션 수인지 사용자 수인지, 어떤 주요 이벤트의 비율인지 지표 이름도 고정해야 합니다. 예전에는 매주 월요일마다 루커 스튜디오 열고, 스크린샷 찍고, 슬랙에 올리는 걸 직접 했는데 이제는 출근하면 이미 올라와 있습니다.
두 번째는 리드 데이터 자동 정리입니다. 웹사이트 문의 폼에서 들어오는 리드 정보가 Google Sheets에 쌓이는데, 이걸 n8n이 받아서 중복 체크하고, 회사명 기준으로 기존 리드와 매칭한 뒤 고객 관계를 관리하는 CRM 시트에 정리해줍니다. 다만 회사명만으로 같은 문의인지 확정하면 서로 다른 담당자의 문의를 합칠 수 있습니다. 실제 중복 기준에는 문의 ID처럼 한 건을 구별하는 값도 필요합니다. 수작업으로 하면 건당 2-3분씩 걸리던 일이 자동으로 처리됩니다.
세 번째는 블로그 발행 알림입니다. RSS는 사이트의 새 글 목록을 제공하는 형식입니다. RSS 피드를 감시하다가 새 글이 올라오면 슬랙에 제목, 링크, 요약을 보내줍니다. 이건 만드는 데 10분도 안 걸렸습니다. n8n에 RSS 트리거 노드가 기본으로 있어서 제 경우 빠르게 구성할 수 있었습니다. 발송 권한, 채널 선택, 이미 보낸 글의 중복 발송 방지는 따로 확인해야 합니다.
이 세 가지만 해도 주당 2~3시간을 절약했다고 느꼈습니다. 이 시간은 제 경험에 따른 수치이며 모든 사용자가 같은 시간을 절약한다는 뜻은 아닙니다. 반복 작업에서 해방된다는 것은 단순히 시간을 아끼는 것 이상으로, 매번 같은 일을 해야 한다는 심리적 부담이 사라진다는 뜻이기도 합니다.
여기서부터 어려워진다
위에서 소개한 자동화들은 비교적 단순한 편에 속합니다. 노드를 연결하고, 기본 설정과 계정 연결로 구성한 작업이었습니다. 문제는 조금이라도 복잡한 로직이 필요해지는 순간 찾아옵니다.
GA4 리포트를 만들 때 일이 있었습니다. API에서 받아온 데이터를 슬랙 메시지 형식에 맞게 가공해야 했는데, 이때 처음으로 Expression이라는 것을 마주했습니다. 다른 노드의 값을 참조하거나 계산식을 넣는 표현식(Expression)이며 JavaScript 문법을 사용할 수 있습니다. 예를 들어 현재 입력에 숫자형 sessions: 1523이 있을 때 다음 표현식은 1,523이라는 표시용 문자열을 만듭니다.
{{ $json.sessions.toLocaleString('ko-KR') }}$json은 현재 항목의 데이터, sessions는 그 안의 필드 이름입니다. toLocaleString('ko-KR')은 한국어 숫자 표기 방식으로 바꾸는 메서드이며, {{ ... }}는 n8n이 안쪽을 표현식으로 평가한다는 표시입니다. 값이 문자열 "1523"이면 먼저 숫자로 바꾸는 처리가 필요하고, 값이 없으면 이름과 입력 구조를 확인해야 합니다.
이 한 줄을 알아내는 데 꽤 오랜 시간이 걸렸습니다. JavaScript를 모르는 사람에게 $json이 뭔지, .toLocaleString()이 뭔지, 왜 중괄호를 두 번 써야 하는지는 직관적이지 않습니다.
더 난감했던 것은 API 인증 문제였습니다. 제가 익혀야 했던 것은 계정 연결과 권한 설정이었습니다. 현재 n8n 공식 Google Analytics 노드는 OAuth 인증을 지원하므로 서비스 계정과 JSON 키 발급이 항상 필요한 것은 아닙니다. 다른 호출 방식에서는 요구되는 인증도 달라질 수 있습니다. Credential은 연결에 쓰는 인증 정보를 저장하는 설정이고, OAuth는 사용자가 앱에 특정 접근을 허용하는 방식입니다. 스코프(scope)는 요청하는 접근 범위입니다. n8n Google 인증 안내
에러 메시지도 큰 벽입니다. 워크플로우가 실패하면 이런 메시지를 보게 됩니다.
ERROR: Request failed with status code 403
{
"error": {
"code": 403,
"message": "Request had insufficient authentication scopes.",
"status": "PERMISSION_DENIED"
}
}이 오류 예시는 요청에 필요한 스코프가 부족하다고 말합니다. 다만 403이라는 번호만으로 모든 오류의 원인이 같지는 않습니다. 계정의 자료 접근 권한이나 서비스 설정도 확인해야 합니다. 당시 저는 이 메시지를 보고 뭘 해야 하는지 감이 전혀 오지 않았습니다. 403이 뭔지, 스코프가 뭔지, 어디서 어떤 권한을 추가해야 하는지를 하나하나 찾아봐야 했습니다.
JSON은 이름과 값을 짝지어 데이터를 표현하는 형식입니다. n8n에서 노드 간에 데이터가 전달되는 형식이 JSON인데, 중첩된 객체에서 원하는 값을 꺼내려면 경로를 정확히 알아야 합니다.
{
"rows": [
{
"dimensionValues": [{"value": "organic"}],
"metricValues": [{"value": "1523"}]
}
]
}이 예시에서 $json.rows[0].metricValues[0].value는 문자열 "1523"을 가리킵니다. {}는 이름과 값을 모은 객체이고, []는 여러 항목을 순서대로 담는 배열입니다. [0]은 배열의 첫 항목을 뜻합니다. 즉 rows의 첫 행 → metricValues의 첫 항목 → value를 차례로 찾는 경로입니다. 실제 노드가 데이터를 다른 형태로 출력한다면 이 경로도 달라집니다.
AI가 도와준다고 해도
"Claude나 ChatGPT한테 물어보면 되지 않나?" 이 말은 반은 맞고 반은 틀립니다.
실제로 AI의 도움을 많이 받았습니다. Expression 문법을 모를 때, 에러 메시지를 해석할 때, 워크플로우 로직을 설계할 때 AI에게 질문하면 꽤 정확한 답을 줍니다. 처음 GA4 연동을 할 때도 Claude에게 단계별로 물어가며 설정했고, 덕분에 혼자 헤매는 시간을 많이 줄일 수 있었습니다.
하지만 AI가 알려준 코드를 그대로 붙여넣기만 해서는 한계가 금방 옵니다. 워크플로우가 정상적으로 돌아갈 때는 문제가 없는데, 뭔가 하나가 바뀌거나 에러가 나면 스스로 수정할 수가 없습니다. AI에게 다시 물어볼 수는 있지만, 상황을 정확히 설명하려면 결국 본인이 어느 정도는 이해하고 있어야 합니다. "에러가 났어요"라고만 말해서는 AI도 도와주기 어렵습니다. 어떤 노드에서, 어떤 데이터가 들어왔을 때, 어떤 에러가 발생했는지를 설명할 수 있어야 구체적인 답을 받을 수 있습니다.
결국 AI는 학습 속도를 높여주는 도구이지, 학습을 대체해주는 도구는 아니었습니다.
결국 공부해야 하는 것들
n8n을 제대로 활용하려면 비개발자도 결국 다음과 같은 것들을 어느 정도 이해해야 합니다.
JSON은 피할 수 없습니다. n8n에서 데이터가 흘러가는 기본 형식이 JSON이기 때문에, 최소한 객체와 배열의 차이, 중첩 구조에서 값을 찾는 방법 정도는 알아야 합니다. 처음에는 화면에서 입력 필드를 끌어와 연결할 수도 있습니다. 구조를 알면 값이 비거나 엉뚱한 필드를 연결했을 때 원인을 찾기 쉽습니다.
HTTP는 웹에서 요청과 응답을 주고받는 규칙입니다. GET은 주로 자료 조회, POST는 자료 제출 같은 요청에 사용합니다. 응답의 상태 코드에서 200은 성공, 400은 잘못된 요청, 401은 인증 문제, 403은 접근 거부, 500은 서버 내부 오류를 뜻합니다. 번호는 확인 방향을 알려 주므로 구체적인 원인은 오류 문구와 함께 봅니다. 외부 서비스에 직접 요청하는 HTTP Request 노드를 사용할 때 조금씩 익혀도 됩니다.
Expression 문법, 즉 JavaScript 기초도 어느 정도 필요합니다. 기본 조건은 If 노드의 비교 설정, 단순 필드 변경은 Edit Fields 노드 같은 화면 기능으로 처리할 수 있습니다. 복잡한 변환이나 계산에는 표현식이 도움이 됩니다. 프로그래밍을 깊이 배울 필요는 없지만, 변수가 뭔지, 조건문이 뭔지, 배열을 어떻게 다루는지 정도는 이해해야 합니다.
그리고 이 모든 것의 바탕에는 논리적 사고가 있습니다. 자동화 워크플로우를 설계한다는 건 결국 "A 조건이면 B를 하고, 아니면 C를 한다"는 로직을 짜는 일입니다. 이 로직을 명확하게 정리하지 못하면 워크플로우가 복잡해질수록 어디서 문제가 생기는지 찾기가 어려워집니다.
이 모든 것을 혼자 배우고 극복하는 것은 시간이 많이 필요합니다. 저도 위에서 소개한 세 가지 자동화를 안정적으로 돌리기까지 약 한 달 정도 퇴근 후 시간을 투자했습니다.
n8n의 실제 효용
쓸 만합니다. 다만 조건이 있습니다.
제 업무에서는 반복 작업 시간이 줄어드는 효과가 있었습니다. 예약 실행과 권한이 유지되고 오류 처리가 준비된 워크플로우는 반복 실행할 수 있어서, 초기에 고생한 만큼 이후에는 계속 시간을 벌 수 있습니다. 주 2~3시간 절약을 4주로 단순 계산하면 8~12시간입니다. 다만 전체 효용을 판단하려면 구독 비용과 오류 수정 및 유지보수에 드는 시간도 빼야 합니다. 그 시간에 더 중요한 분석이나 전략 업무에 집중할 수 있으니 충분히 가치가 있습니다.
하지만 그 "초기 고생"이 만만치 않다는 점을 알고 시작해야 합니다. 간단한 자동화 몇 개는 하루 만에 만들 수 있지만, 실무에서 안정적으로 돌아가는 워크플로우를 구축하려면 디버깅과 예외 처리에 상당한 시간을 쓰게 됩니다. "30분 만에 뚝딱"이라고 소개하는 글들은 대체로 가장 단순한 케이스만 보여주는 것이지, 실제 업무에 적용할 때의 복잡함까지 담고 있지는 않습니다.
비개발자에게 n8n을 추천하겠냐고 묻는다면, 이렇게 답하겠습니다. 반복 작업이 실제로 업무 시간의 의미 있는 부분을 차지하고 있고, 새로운 것을 배우는 데 거부감이 없으며, 당장의 결과보다 중장기적인 효율 개선에 관심이 있다면 시도해볼 가치가 있습니다. 하지만 "코딩 몰라도 된다"는 말만 믿고 시작하면 중간에 좌절할 가능성이 높습니다.
쉽게 얻는 것은 없다
n8n이든 다른 어떤 자동화 도구든, 도구가 해주는 것은 진입장벽을 낮춰주는 것이지 없애주는 것이 아닙니다. 직접 프로그램을 작성하는 방법 외에도 노드를 연결하는 방식으로 시작할 수 있습니다. 그 과정에서 자주 만나는 어려움, 즉 데이터 구조를 이해하고, 로직을 설계하고, 에러를 해결하는 능력은 여전히 본인이 갖춰야 합니다.
AI의 도움을 받더라도 결과를 확인하는 역할은 남습니다. AI는 훌륭한 과외 선생님 같은 존재이지, 대신 시험을 봐주는 존재는 아닙니다. 결국 이해하고 판단하는 것은 본인의 몫입니다.
그래도 도전할 가치는 있다고 생각합니다. 저 역시 한 달 전의 저와 지금의 저를 비교하면, 자동화를 이해하는 정도뿐 아니라 데이터가 시스템 사이를 어떻게 흘러가는지 아는 감각이 생겼습니다. 이런 감각은 마케터로서도 분명히 도움이 됩니다. GA4 데이터를 API로 직접 다뤄보면 대시보드 너머에 있는 데이터의 구조가 보이기 시작하고, 그러면 분석의 관점도 달라집니다.
각오하고 시작한다면, 해볼 만한 도전입니다. 다만 "쉽다"는 말은 하지 않겠습니다.
자주 묻는 질문
코딩을 몰라도 n8n으로 자동화를 만들 수 있나요?
단순한 자동화까지는 만들 수 있습니다. RSS의 새 글을 슬랙으로 알리는 흐름은 기본 노드로 구성할 수 있습니다. 다만 서비스 인증과 발송 대상, 중복 방지 설정도 확인해야 합니다. 기본 설정으로 해결되지 않는 변환이 생기면 필요한 데이터 구조와 표현식을 조금씩 익히면 됩니다. 모든 자동화에 직접 코드를 작성해야 하는 것은 아닙니다.
셀프호스팅으로 시작하는 편이 좋나요?
처음에는 Cloud 쪽이 부담이 적습니다. 셀프호스팅이 유행이지만 서버 세팅에서 막히면 정작 도구를 써 보지도 못한 채 시간을 쓰게 됩니다. Cloud는 별도 서버 설치 없이 워크플로우를 만들 수 있어서 이 도구가 내 업무에 맞는지 먼저 확인하기에 알맞습니다.
AI에게 물어보면서 만들면 충분하지 않나요?
절반만 맞습니다. Expression 문법이나 에러 메시지 해석은 AI에게 물으면 꽤 정확한 답이 돌아와서 혼자 헤매는 시간이 줄어듭니다. 다만 어느 노드에서 어떤 데이터가 들어왔을 때 무슨 에러가 났는지 설명할 수 있어야 쓸 만한 답이 나오므로, 이해 자체를 대신해 주지는 않습니다.
처음에는 숫자 한 개만 바꿔 봅니다
앞의 후기는 여러 서비스를 연결한 경험입니다. 처음에는 1523 → 1,523처럼 결과를 눈으로 확인할 수 있는 작은 변환부터 시작할 수 있습니다. 아래 선택 연습은 이미 사용할 수 있는 n8n 환경이 있을 때만 진행합니다. 새 구독이나 서버 설치는 필요하지 않습니다.
- 새 워크플로를 만들고 시작 노드로 Manual Trigger를 선택합니다. 직접 실행 버튼을 눌렀을 때 시작하는 노드입니다.
- 첫 Edit Fields (Set) 노드를 연결하고 이름을
연습 숫자로 바꿉니다.Manual Mapping에서 필드 이름sessions, 형식Number, 고정값1523을 넣습니다. - 두 번째 Edit Fields (Set) 노드를 연결하고 이름을
숫자 표시로 바꿉니다. 필드 이름display, 형식String을 선택하고 값 입력을Expression으로 전환합니다. - 값에
{{ $json.sessions.toLocaleString('ko-KR') }}를 넣고 Execute Workflow를 눌러 수동 실행합니다. 두 번째 노드의 출력에서display가1,523인지 확인합니다.
화면 이름은 버전에 따라 조금 다를 수 있습니다. Number는 숫자, String은 문자열 형식입니다. 이 연습은 Slack이나 GA4에 연결하지 않으므로 메시지를 보내거나 실제 분석 자료를 가져오지 않습니다. Edit Fields 공식 안내
결과가 없으면 연습 숫자 노드의 출력에 sessions가 있는지, 숫자 형식인지, 다음 노드로 연결됐는지 봅니다. 표현식이 글자 그대로 나오면 값 입력이 Fixed가 아닌 Expression인지 확인합니다. undefined 관련 오류는 필드 이름이나 입력 구조를 잘못 참조했을 가능성이 있으므로, 오류를 숨기기보다 입력을 먼저 봅니다.
혼자 반복할 때 첫 숫자만 2500으로 바꿉니다. 다시 수동 실행했을 때 display가 2,500이면 입력 변화가 다음 단계까지 전달된 것입니다. 예약 실행을 설정하지 않았으므로 저장만 해 두어도 매주 자동 실행되는 것은 아닙니다.
사용 가능한 n8n 환경이 없다면 위 JSON에서 rows[0] 안의 metricValues[0].value를 손으로 찾아 1523이라고 적고, 2500으로 바뀌었을 때의 표시 결과가 2,500인지 확인하는 것으로 시작할 수 있습니다.
Sources

제대로 이해했는지 한 문제로 확인해 볼까요?
답을 고르면 바로 풀이가 나와요.
이 글에서 필자가 n8n을 사용하며 어려움을 겪었다고 설명한 기반 지식은 무엇일까요?
이 글이 도움이 되었나요?
메일, 회의록, 리포트처럼 반복되는 일을 AI로 자동화하는 순서와 안전장치를 다룹니다
코스 전체 보기 →
새 글과 AI 소식을 메일로 받아 보세요
AI가 바꾸는 일과 도구, 측정 실무 이야기를 매주 한 번 보내 드려요.
