표를 하나 늘렸더니 한 달 동안 초대 메일이 한 통도 안 나갔습니다
운영팀 메일에 브랜드 이름 자리가 「Unknown Brand」로 찍혀 왔습니다. 템플릿 문제로 보였지만, 파 보니 관리자 화면의 의뢰 큐도 캠페인을 못 읽고 있었고 초대·리마인더·접수 알림 세 종류의 자동 메일은 8월 중순 이후 한 통도 성공한 적이 없었습니다. 원인은 8월 14일에 붙은 「캠페인에 브랜드 고정」 기능이 만든 연결 표 하나였습니다. 기존 조회가 두 갈래가 돼 데이터베이스가 거부했는데, 에러를 버리고 「Unknown」으로 넘어가는 폴백이 사고를 이상한 메일 한 통으로 줄였습니다. 대표가 가져갈 세 칸을 작업 기록 원문으로 정리했습니다.
자동 메일이 안 나가거나 「Unknown」이 찍혀 오면, 템플릿보다 데이터 조회 실패를 먼저 의심합니다. 저희가 운영을 돕는 플랫폼 한 곳은 표를 하나 늘린 뒤 초대·리마인더·접수 알림 메일이 한 달 동안 한 통도 성공하지 못했고, 아무도 몰랐습니다.
"메일 템플릿이 이상한가 봐요"
거르세요"조회가 실패한 건 아닙니까"
믿으세요새 연결 표 하나가 기존 조회를 「어느 길로 가야 하나」 두 갈래로 만들어 데이터베이스가 거부했고, 그 거부를 받은 코드가 에러를 버리고 「Unknown Brand」로 넘어가도록 돼 있어 사고가 이상한 메일 한 통으로만 보였습니다. 고침은 조회에 「이 길로 가라」 한 줄이었습니다.
운영팀 메일에 브랜드 이름 자리가 「Unknown Brand」로 찍혀 왔습니다.
처음엔 메일 템플릿 문제로 보였습니다.
파 보니 관리자 화면의 의뢰 큐도 캠페인을 못 읽고 있었고, 세 종류의 자동 메일은 8월 중순 이후 한 통도 성공한 적이 없었습니다.
한 달 동안 아무도 몰랐습니다.
이 글은 9월 10일 그 자리를 파 들어간 기록을 원문으로 옮기고, 대표가 가져갈 세 칸을 정리한 것입니다.
고객사 이름·표 이름·오류 코드는 싣지 않습니다.
증상
「Unknown Brand」 메일 한 통이 전부가 아니었습니다
시작은 운영팀 받은편지함의 메일 한 통이었습니다.
의뢰가 들어왔다는 알림인데, 브랜드 이름 자리에 「Unknown Brand」가 찍혀 있었습니다.
템플릿 변수가 빠졌나 싶어 열어 봤습니다.
템플릿은 멀쩡했고, 그 자리에 넣을 값이 애초에 오지 않은 것이었습니다.
① 운영팀 의뢰 알림 메일 「Unknown Brand」(워커가 에러를 삼키고 폴백)
② 어드민 의뢰 큐·상세가 캠페인 못 읽음
③ 캠페인 초대·리마인더·워커 접수 알림 발송 실패(8/11 이후 성공 0).
8/14~9/10 한 달 아무도 몰랐다
저희 운영 지원 작업 기록 원문 (2026-09-10 · 저희가 운영을 돕는 플랫폼 한 곳 · 표 이름·오류 코드·화면 주소는 일반 명사로 풀어 씀)
같은 원인이 세 곳에 다른 얼굴로 나타나 있었습니다.
메일에는 「Unknown」으로, 관리자 화면에는 빈 큐로, 발송 기록에는 실패 행으로.
셋 중 어느 하나도 「사고」라고 소리치지 않았습니다.
메일은 나갔고, 화면은 떴고, 실패 행은 아무도 안 보는 표에 쌓였습니다.
증상 세 개를 원인 하나로 묶는 질문이 먼저였습니다.
원인
표 하나를 늘리자 옛 조회가 두 갈래가 됐습니다
원인은 8월 14일에 붙은 기능 하나였습니다.
「캠페인에 브랜드를 고정(핀)한다」는 기능이었고, 그러려면 캠페인과 브랜드 사이에 연결 표를 하나 더 만들어야 했습니다.
그 표가 생기는 순간 캠페인에서 브랜드로 가는 길이 둘이 됐습니다.
원래 있던 「캠페인의 브랜드」 길과, 새로 생긴 「캠페인에 고정된 브랜드들」 길.
2026-08-14 캠페인 핀 표가 캠페인↔브랜드 다대다 경로를 하나 더 만들었기 때문.
정답은 브랜드 프로필!캠페인_브랜드_외래키(...)
계약→브랜드 프로필은 경로가 하나라 멀쩡.
저희 운영 지원 작업 기록 원문 (2026-09-10 · 저희가 운영을 돕는 플랫폼 한 곳 · 표 이름·오류 코드·화면 주소는 일반 명사로 풀어 씀)
기존 조회는 「캠페인 정보를 가져올 때 브랜드 정보도 같이」라고만 적혀 있었습니다.
길이 하나일 땐 그걸로 충분했고, 길이 둘이 되자 데이터베이스는 모호하다며 거부했습니다.
이건 이 플랫폼만의 버릇이 아닙니다.
같은 데이터베이스 API 의 공식 문서가 똑같은 상황을 예제로 적어 두고 있습니다.
PostgREST 공식 문서 「Resource Embedding」 원문 (2026-09-11 확인)
새 기능은 「추가」였습니다.
기존 조회는 한 글자도 안 바뀌었는데, 옆에 길이 하나 늘자 그 조회가 깨졌습니다.
새 기능이 「추가」라고 기존 것이 그대로인 건 아닙니다.
침묵
에러를 삼키는 폴백이 사고를 메일 한 통으로 줄였습니다
데이터베이스는 거부했습니다.
그런데 왜 한 달 동안 아무도 몰랐을까요.
저희 운영 지원 작업 기록 원문 (2026-09-10 · 저희가 운영을 돕는 플랫폼 한 곳 · 표 이름·오류 코드·화면 주소는 일반 명사로 풀어 씀)
자동화 코드가 데이터베이스에 묻는 방식은 이렇습니다.
답이 오면 「데이터」 칸에, 실패하면 「에러」 칸에 담겨 돌아옵니다.
Supabase JavaScript 공식 문서 「select()」 원문 (2026-09-11 확인)
발송 워커는 「데이터」 칸만 봤습니다.
비어 있으면 브랜드 이름을 「Unknown Brand」로 채워 메일을 내보냈고, 「에러」 칸은 읽지 않고 버렸습니다.
그래서 실패는 실패로 집계되지 않았습니다.
메일은 정상 발송으로 찍혔고, 내용만 이상했습니다.

이 폴백은 만든 사람 입장에선 친절이었을 겁니다.
값이 없어도 메일이 깨지지 않게 하자는.
결과는 은폐였습니다.
「Unknown」·「-」·빈칸으로 나가는 자동 메일은 실패 알림이 되어야지, 정상 발송으로 집계되면 안 됩니다.
에러를 삼키는 폴백은 실패가 실패로 보이지 않게 만듭니다.
조치
고침은 「이 길로 가라」 한 줄이었고, 같은 날 두 번째 결함도 나왔습니다
고치는 건 조회에 「이 길로 가라」를 붙이는 것이었습니다.
브랜드 정보를 가져올 때 어느 연결을 타는지 이름을 적어 주면 두 갈래가 한 갈래로 돌아옵니다.
PostgREST 공식 문서 「Resource Embedding」 원문 (2026-09-11 확인)
그런데 다시 보낸 메일을 열자 링크가 절반만 찍혀 있었습니다.
같은 날 두 번째 결함이었습니다.
저희 운영 지원 작업 기록 원문 (2026-09-10 · 저희가 운영을 돕는 플랫폼 한 곳 · 표 이름·오류 코드·화면 주소는 일반 명사로 풀어 씀)
메일 링크의 앞부분, 그러니까 「어느 사이트의」에 해당하는 주소 설정 두 개가 배포 환경에 없었습니다.
코드에는 있었고, 로컬에는 있었고, 운영 환경에만 없었습니다.
이것도 소리치지 않았습니다.
주소가 없으면 빈 문자열로 이어 붙이도록 돼 있었으니까요.
저희 운영 지원 작업 기록 원문 (2026-09-10 · 저희가 운영을 돕는 플랫폼 한 곳 · 표 이름·오류 코드·화면 주소는 일반 명사로 풀어 씀)
조회 한 줄, 설정 두 개.
고침은 한 시간 안에 끝났고, 찾는 데 한 달이 걸렸습니다.
고치는 비용은 한 줄이었고, 못 찾은 비용은 한 달이었습니다.
대표의 세 칸
대표가 가져갈 세 칸은 「실패가 실패로 보이게 돼 있는가」입니다
이번 일에서 저희 작업 기록에 규칙 두 줄이 추가됐습니다.
원문 그대로 옮깁니다.
저희 운영 지원 작업 기록에 추가된 규칙 원문 (2026-09-10)
대표는 코드를 읽지 않아도 됩니다.
다음 세 칸만 물으면 됩니다.

하나, 무언가를 「추가」한 날 기존 조회가 아직 한 갈래인지 확인했는가.
이번엔 표 하나였지만 연결·필드·설정도 같은 방식으로 옛것을 모호하게 만듭니다.
둘, 「Unknown」·「-」·빈칸으로 나가는 자동 메일이 실패로 집계되는가.
정상 발송으로 세어지면 한 달이 지나도 대시보드는 초록입니다.
셋, 「메일이 이상하다」 신고에 첫 질문이 무엇인가.
템플릿이 아니라 「그 값을 가져오는 조회가 살아 있는가」여야 합니다.
자동화는 붙일 때보다 옆에 뭔가 추가됐을 때 조용히 깨집니다.
정리
경고 신호
자동 메일에 「Unknown」·「-」·빈칸이 찍혀 나가는데 발송 상태는 「성공」이다
새 기능을 붙인 날 기존 화면·메일·알림을 다시 확인한 기록이 없다
「메일이 이상하다」 신고에 템플릿부터 고치기 시작한다
실패 행이 아무도 안 보는 표에만 쌓이고 사람에게 오는 알림이 없다
좋은 신호
값을 못 가져오면 메일이 「이상하게」 나가는 대신 「안 나가고 실패 알림」이 온다
표·연결·필드를 추가한 날 기존 조회를 한 번 때려 보는 확인이 붙어 있다
증상 세 개가 오면 원인 하나로 묶는 질문이 먼저다
배포 환경 설정 목록이 코드의 설정 목록과 대조돼 있다
자동 메일이 이상할 때 이 네 가지만 물어보세요
메일에 「Unknown」·「-」·빈칸이 찍힌 발송이 「성공」으로 집계되고 있습니까?
성공으로 세어지면 실패는 보이지 않습니다. 이번 플랫폼은 그 상태로 한 달이 지났습니다.최근에 표·연결·필드·설정 중 무엇이 추가됐습니까?
이번엔 8월 14일의 연결 표 하나였습니다. 추가된 날짜와 메일이 이상해진 날짜를 나란히 놓습니다.같은 값을 쓰는 다른 화면·알림도 이상합니까?
관리자 화면의 큐가 비어 있었고 알림 세 종류가 실패였습니다. 셋이 같이 이상하면 템플릿이 아니라 조회입니다.배포 환경의 설정 목록이 코드의 설정 목록과 같습니까?
주소 설정 두 개가 운영 환경에만 없어 링크가 절반만 나갔습니다. 없으면 빈칸으로 이어 붙이는 코드는 이것도 소리치지 않습니다.
자주 묻는 질문
Q. 새 기능을 붙였는데 기존 기능이 왜 깨집니까?
기존 조회가 「이름」이 아니라 「관계」로 적혀 있으면, 같은 두 표 사이에 관계가 하나 더 생기는 순간 어느 관계를 뜻하는지 모호해집니다. 이번 플랫폼은 캠페인과 브랜드 사이에 연결 표 하나가 늘자 데이터베이스가 기존 조회를 거부했습니다. 조회에 어느 연결을 탈지 이름을 적어 주면 돌아옵니다.
Q. 자동 메일에 「Unknown」이 찍혀 오면 무엇부터 봅니까?
템플릿이 아니라 그 값을 가져오는 조회입니다. 저희 규칙은 「메일 내용이 이상하다는 신고는 메일 템플릿보다 데이터 조회 실패를 먼저 의심」입니다. 같은 값을 쓰는 화면·알림이 같이 이상하면 조회 실패가 거의 확실합니다.
Q. 에러가 났으면 왜 아무도 몰랐습니까?
코드가 「데이터」 칸만 읽고 「에러」 칸을 버렸기 때문입니다. 클라이언트 라이브러리는 실패를 예외로 던지지 않고 에러 칸에 담아 돌려주므로, 그 칸을 읽지 않는 코드는 조용히 기본값으로 넘어갑니다. 메일은 정상 발송으로 집계됐습니다.
Q. 폴백을 아예 없애야 합니까?
없애는 게 아니라 방향을 바꿉니다. 값이 없을 때 「이상한 메일을 보낸다」 대신 「메일을 안 보내고 실패 알림을 사람에게 보낸다」로 둡니다. 실패가 실패로 보이면 첫 통에서 잡힙니다.
Q. 링크가 절반만 찍힌 건 같은 원인입니까?
다른 원인입니다. 사이트 주소 설정 두 개가 운영 환경에만 없어 상대경로로 나간 것이었고, 같은 날 재발송을 실측하다 발견됐습니다. 배포 환경의 설정 목록을 코드의 설정 목록과 대조하는 확인으로 잡힙니다.
함께 보면 좋은 글
읽은 다음
아이디어를 실행 구조로 바꿔보세요
업무별 Trigger, Agent, Human Checkpoint가 정리된 Workflow를 확인할 수 있습니다.