텍트그룹
경력근거: 매출·광고·재고·재무·물류 데이터를 읽고 에이전트가 제안하고 사람이 승인하면 실행까지 이어지는 회사의 AI 운영 OS(Mantle)
텍트그룹은 스킨케어 브랜드 SAYNID(세이니드)를 만들어 파는 소비재 회사예요. 미국 소비자에게는 아마존·자사몰 saynid.com·틱톡샵으로, 한국 소비자에게는 무신사 온라인·오프라인 매장과 29CM 같은 편집숍으로 버블 세럼 마스크·크림 마스크 같은 마스크류를 팔아요.
공고는 이 자리가 대표와 함께 만들 것으로 '매출·광고·재고·재무·물류 데이터를 읽고 에이전트가 제안하고 사람이 승인하면 실행까지 이어지는 회사의 AI 운영 OS(Mantle)'를 꼽고, 자격 요건에 '기술보다 고객과 비즈니스를 먼저 보는 분'을 적었어요. 광고비는 광고 플랫폼마다 따로 쌓이고 판매는 채널마다 따로 기록돼서, 한 제품의 광고비를 빼고 돈이 남는지는 여러 곳의 기록을 맞춰 봐야 알 수 있어요. 광고로 주문이 늘어도 팔 재고가 없으면 늘린 광고비는 매출로 돌아오지 않아요.
공고는 대표와 함께 0→1로 만들 것 가운데 하나로, 매출·광고·재고·재무·물류 데이터를 읽고 에이전트가 제안하고 사람이 승인하면 실행까지 이어지는 회사의 AI 운영 OS(Mantle)를 꼽아요. 주요 업무에도 분석·제안·승인·실행·결과 기록까지 이어지는 Agent workflow 구현을 적었어요.
공고는 상품·SKU·채널·주문·재고 같은 소비재 핵심 개념을 멀티브랜드 데이터 모델로 설계하고 채널·광고·물류 데이터를 연동하는 일을 이 자리에 맡겨요. 우대사항에는 Amazon Ads·Meta 같은 광고 플랫폼과 Shopify·WMS 같은 외부 SaaS를 연동해 본 경험을 적었어요.
자격 요건은 무엇을 만들지보다 그게 고객 경험과 매출·비용을 어떻게 바꾸는지로 판단하는 사람을 찾아요. 주요 업무도 문제를 직접 정의하고 만들어 실제 매출과 운영으로 검증하는 일로 적었어요.
대표가 매주 광고 예산을 승인하기 전에 여는 관리자 페이지예요. 미국 채널(아마존·자사몰·틱톡샵)에서 파는 제품마다 지난 한 주에 광고비를 빼고도 돈이 남았는지, 광고를 늘려도 남는지, 늘린 만큼 팔 재고가 있는지 알려 주고, 채널·제품별 광고 예산 제안으로 묶어 보여 줘요. 받은 데이터를 담을 DB 설계와 기술·구조, 그리고 남는 돈이 광고비의 몇 배여야 늘려도 된다고 볼지와 재고가 며칠분 아래면 모자라다고 볼지는 지원자가 정해요.
광고 예산을 승인하는 PO 출신 대표예요. 같은 제품도 채널마다 판매가와 수수료가 달라서, 광고비를 더 넣을지 정하려면 채널·제품마다 매출·원가·광고비·재고를 한자리에 놓고 봐야 해요.
미국 채널에 올린 제품과 그 비용 설정이에요. 한 행이 한 채널에 올린 제품 하나이고 channel 과 sku 묶음이 키예요. channel 은 amazon_us(아마존 미국)·saynid_com(자사몰)·tiktok_shop_us(틱톡샵 미국) 가운데 하나이고, 같은 sku 가 여러 채널에 올라 있으면 채널마다 한 행씩 있어요. product_name 과 product_cost_cents(한 개를 만들어 미국 창고까지 들여오는 원가)는 sku 가 같으면 어느 채널에서나 같아요. fulfillment_fee_cents 는 그 채널에서 한 개를 내보낼 때 드는 출고 비용이고, fee_bp 는 판매 금액에 붙는 그 채널의 수수료율이에요(1만분율, 1500 이면 15%). 금액은 모두 미국 센트 정수이고, 이 값들은 데이터 기간 동안 바뀌지 않았어요. 이름 일부가 같은 다른 제품(콜라겐·PDRN 버블 세럼 마스크, 크림 마스크 100ml 와 트라이얼 키트)과 세 채널에 모두 올라 있는 제품이 들어 있어요. 시작용과 큰 데이터 모두 9행 전부예요.
전체 9행 가운데 앞 5행이에요.
| channel | sku | product_name | product_cost_cents | fulfillment_fee_cents | fee_bp |
|---|---|---|---|---|---|
| amazon_us | SN-CLB-060 | 콜라겐 리프팅 CO2 버블 세럼 마스크 60ml | 410 | 352 | 1,500 |
| amazon_us | SN-PDB-060 | PDRN 리바이탈라이징 CO2 버블 세럼 마스크 60ml | 460 | 352 | 1,500 |
| amazon_us | SN-SBM-100 | 스킨 바이옴 리뉴잉 크림 마스크 100ml | 390 | 386 | 1,500 |
| amazon_us | SN-RTC-015 | 레티날 퍼밍 부스터 크림 15ml | 430 | 322 | 1,500 |
| saynid_com | SN-CLB-060 | 콜라겐 리프팅 CO2 버블 세럼 마스크 60ml | 410 | 540 | 290 |
9행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 9행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "한 채널에 올린 제품 하나. 키는 (channel, sku) 묶음.",
"additionalProperties": false,
"required": [
"channel",
"sku",
"product_name",
"product_cost_cents",
"fulfillment_fee_cents",
"fee_bp"
],
"properties": {
"channel": {
"type": "string",
"enum": [
"amazon_us",
"saynid_com",
"tiktok_shop_us"
],
"description": "판매 채널. amazon_us 는 아마존 미국, saynid_com 은 자사몰, tiktok_shop_us 는 틱톡샵 미국이에요."
},
"sku": {
"type": "string",
"pattern": "^SN-[A-Z]{3}-[A-Z0-9]{3}$",
"description": "제품 코드. 같은 제품은 어느 채널에서나 같은 코드예요."
},
"product_name": {
"type": "string",
"description": "제품 이름. sku 가 같으면 어느 채널에서나 같은 글자예요."
},
"product_cost_cents": {
"type": "integer",
"minimum": 1,
"description": "한 개를 만들어 미국 창고까지 들여오는 원가(미국 센트). sku 가 같으면 같은 값이에요."
},
"fulfillment_fee_cents": {
"type": "integer",
"minimum": 1,
"description": "이 채널에서 한 개를 내보낼 때 드는 출고 비용(미국 센트)."
},
"fee_bp": {
"type": "integer",
"minimum": 0,
"maximum": 10000,
"description": "판매 금액(orders.revenue_cents)에 붙는 이 채널의 수수료율, 1만분율(1500 = 15%)."
}
}
}세 채널에서 받은 주문이에요. 한 행이 주문 한 건이고 order_id 가 키예요. 이 데이터에서는 한 주문에 제품 하나만 담겨 있어요. channel 과 sku 묶음은 listings 의 channel·sku 묶음을 가리켜요. ordered_at 은 채널이 주문을 받은 시각, units 는 주문한 개수, revenue_cents 는 그 주문에서 고객이 낸 상품 금액(할인 뒤, 세금·배송비 빼고, 미국 센트)이에요. cancelled_at 은 채널이 주문 취소를 기록한 시각이고, 취소되지 않았으면 null 이에요. 두 시각 모두 채널이 기록한 시각을 미국 서부 시간(-07:00)으로 적은 것이라, inventory_snapshots.observed_at·budget_reviews.review_at 과 같은 기준으로 그대로 견줄 수 있어요. 판매가 며칠에만 몰린 제품, 취소가 몰린 제품, 재고가 떨어져 며칠 팔리지 않은 제품, 검토 구간이 시작하기 직전과 검토 시각 직후에 들어온 주문이 들어 있어요. 큰 데이터는 2026년 4월 6일부터 10월 26일까지 받은 주문 1,985건 전부이고, 시작용은 그 가운데 10월 18일 22시부터 10월 26일 2시 전까지 받은 74건 전부를 같은 ID·같은 값으로 잘라 낸 거예요.
전체 74행 가운데 앞 5행이에요.
| order_id | channel | sku | ordered_at | units | revenue_cents | cancelled_at |
|---|---|---|---|---|---|---|
| OD-101903 | amazon_us | SN-CLB-060 | 2026-10-18T22:37:37-07:00 | 1 | 2,999 | — |
| OD-101904 | saynid_com | SN-SBM-100 | 2026-10-18T23:47:32-07:00 | 3 | 8,397 | — |
| OD-101905 | amazon_us | SN-CLB-060 | 2026-10-19T09:12:36-07:00 | 1 | 2,999 | — |
| OD-101906 | saynid_com | SN-SBM-T03 | 2026-10-19T09:40:59-07:00 | 1 | 999 | — |
| OD-101907 | saynid_com | SN-CLB-060 | 2026-10-19T10:11:33-07:00 | 1 | 2,999 | — |
74행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 1,985행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "주문 한 건. 키는 order_id.",
"additionalProperties": false,
"required": [
"order_id",
"channel",
"sku",
"ordered_at",
"units",
"revenue_cents",
"cancelled_at"
],
"properties": {
"order_id": {
"type": "string",
"pattern": "^OD-[0-9]{6}$",
"description": "주문 번호. 이 표의 키예요."
},
"channel": {
"type": "string",
"enum": [
"amazon_us",
"saynid_com",
"tiktok_shop_us"
],
"description": "판매 채널. amazon_us 는 아마존 미국, saynid_com 은 자사몰, tiktok_shop_us 는 틱톡샵 미국이에요. sku 와 묶어 listings 의 (channel, sku) 를 가리켜요."
},
"sku": {
"type": "string",
"pattern": "^SN-[A-Z]{3}-[A-Z0-9]{3}$",
"description": "주문한 제품 코드. channel 과 묶어 listings 의 (channel, sku) 를 가리켜요."
},
"ordered_at": {
"type": "string",
"format": "date-time",
"description": "채널이 주문을 받은 시각. 미국 서부 시간(-07:00) ISO 8601, 초 단위."
},
"units": {
"type": "integer",
"minimum": 1,
"description": "주문한 개수."
},
"revenue_cents": {
"type": "integer",
"minimum": 1,
"description": "이 주문에서 고객이 낸 상품 금액(미국 센트). 할인 뒤 금액이고 세금·배송비는 빠져 있어요."
},
"cancelled_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "채널이 주문 취소를 기록한 시각. ordered_at 과 같은 미국 서부 시간(-07:00) ISO 8601. 취소되지 않았으면 null 이에요."
}
}
}광고 플랫폼 보고서로 받은 캠페인별 하루 광고비예요. 한 행이 캠페인 하나의 하루치이고 campaign_id 와 spend_date 묶음이 키예요. platform 은 amazon_ads·meta·tiktok_ads 가운데 하나예요. 이 데이터에서는 캠페인 하나가 한 채널의 제품 하나만 광고하고, channel 과 sku 묶음이 listings 의 channel·sku 묶음을 가리켜요. 같은 채널·제품에 캠페인이 둘인 경우와, 같은 제품을 채널마다 다른 플랫폼에서 광고하는 경우가 있어요. spend_date 는 미국 서부 시간 기준 날짜이고, spend_cents 는 그날 그 캠페인에 쓴 광고비(미국 센트)예요. 캠페인을 멈춘 날은 행이 없어요. 큰 데이터는 4월 6일부터 10월 26일까지 캠페인 10개의 1,987행 전부이고, 시작용은 10월 19일부터 25일까지 7일치 69행 전부예요.
전체 69행 가운데 앞 5행이에요.
| campaign_id | platform | channel | sku | spend_date | spend_cents |
|---|---|---|---|---|---|
| CP-101 | amazon_ads | amazon_us | SN-CLB-060 | 2026-10-19 | 1,394 |
| CP-102 | amazon_ads | amazon_us | SN-CLB-060 | 2026-10-19 | 704 |
| CP-103 | amazon_ads | amazon_us | SN-PDB-060 | 2026-10-19 | 1,106 |
| CP-104 | amazon_ads | amazon_us | SN-SBM-100 | 2026-10-19 | 824 |
| CP-105 | amazon_ads | amazon_us | SN-RTC-015 | 2026-10-19 | 1,462 |
69행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 1,987행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "캠페인 하나의 하루 광고비. 키는 (campaign_id, spend_date) 묶음.",
"additionalProperties": false,
"required": [
"campaign_id",
"platform",
"channel",
"sku",
"spend_date",
"spend_cents"
],
"properties": {
"campaign_id": {
"type": "string",
"pattern": "^CP-[0-9]{3}$",
"description": "광고 캠페인 번호. 한 캠페인은 한 채널의 제품 하나만 광고해요."
},
"platform": {
"type": "string",
"enum": [
"amazon_ads",
"meta",
"tiktok_ads"
],
"description": "광고를 집행한 플랫폼."
},
"channel": {
"type": "string",
"enum": [
"amazon_us",
"saynid_com",
"tiktok_shop_us"
],
"description": "판매 채널. amazon_us 는 아마존 미국, saynid_com 은 자사몰, tiktok_shop_us 는 틱톡샵 미국이에요. 이 캠페인이 손님을 보내는 채널. sku 와 묶어 listings 의 (channel, sku) 를 가리켜요."
},
"sku": {
"type": "string",
"pattern": "^SN-[A-Z]{3}-[A-Z0-9]{3}$",
"description": "이 캠페인이 광고하는 제품 코드. channel 과 묶어 listings 의 (channel, sku) 를 가리켜요."
},
"spend_date": {
"type": "string",
"format": "date",
"description": "광고비가 쓰인 날. 미국 서부 시간 기준 날짜(YYYY-MM-DD)."
},
"spend_cents": {
"type": "integer",
"minimum": 1,
"description": "그날 이 캠페인에 쓴 광고비(미국 센트). 멈춘 날은 행이 없어요."
}
}
}채널 창고 재고를 하루 한 번 읽은 기록이에요. 한 행이 한 번 읽은 한 채널·제품의 재고이고 channel·sku·observed_at 묶음이 키예요. channel 과 sku 묶음은 listings 의 channel·sku 묶음을 가리켜요. 이 데이터에서는 채널마다 창고 재고를 따로 두어서, 한 채널의 재고는 그 채널의 취소되지 않은 주문으로만 줄고 입고로만 늘어요. observed_at 은 채널의 창고 재고 수치를 읽어 온 시각(미국 서부 시간)이고 채널마다 아침 정해진 무렵에 읽어요. 이 데이터에서는 읽어 온 쪽 시계가 채널 시계와 맞아서, observed_at 을 채널이 기록한 orders 의 ordered_at·cancelled_at 과 그대로 견줄 수 있어요. available_units 는 그때 팔 수 있던 개수예요. 재고가 0까지 떨어졌다가 다시 들어온 제품, 몇 개만 남은 제품, 검토 시각 바로 뒤에 새 재고가 들어온 제품이 있어요. 큰 데이터는 4월 6일부터 10월 26일까지 1,836행 전부이고, 시작용은 10월 24일 0시부터 10월 27일 0시 전까지 읽은 27행 전부예요.
전체 27행 가운데 앞 5행이에요.
| channel | sku | observed_at | available_units |
|---|---|---|---|
| amazon_us | SN-CLB-060 | 2026-10-24T06:03:02-07:00 | 77 |
| amazon_us | SN-PDB-060 | 2026-10-24T06:05:22-07:00 | 0 |
| amazon_us | SN-SBM-100 | 2026-10-24T06:08:33-07:00 | 14 |
| amazon_us | SN-RTC-015 | 2026-10-24T06:10:43-07:00 | 3 |
| saynid_com | SN-SBM-T03 | 2026-10-24T07:31:50-07:00 | 141 |
27행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 1,836행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "한 번 읽은 한 채널·제품의 창고 재고. 키는 (channel, sku, observed_at) 묶음.",
"additionalProperties": false,
"required": [
"channel",
"sku",
"observed_at",
"available_units"
],
"properties": {
"channel": {
"type": "string",
"enum": [
"amazon_us",
"saynid_com",
"tiktok_shop_us"
],
"description": "판매 채널. amazon_us 는 아마존 미국, saynid_com 은 자사몰, tiktok_shop_us 는 틱톡샵 미국이에요. sku 와 묶어 listings 의 (channel, sku) 를 가리켜요."
},
"sku": {
"type": "string",
"pattern": "^SN-[A-Z]{3}-[A-Z0-9]{3}$",
"description": "제품 코드. channel 과 묶어 listings 의 (channel, sku) 를 가리켜요."
},
"observed_at": {
"type": "string",
"format": "date-time",
"description": "채널의 창고 재고 수치를 읽어 온 시각. 읽어 온 쪽 시계로 찍은 미국 서부 시간(-07:00) ISO 8601, 초 단위. 이 데이터에서는 그 시계가 채널 시계와 맞아요."
},
"available_units": {
"type": "integer",
"minimum": 0,
"description": "그 시각 이 채널 창고에서 팔 수 있던 개수."
}
}
}대표가 광고 예산을 검토하는 회차예요. 한 행이 검토 한 번이고 review_id 가 키예요. review_at 은 이 기능이 '지금'으로 삼는 시각(미국 서부 시간)이에요. lookback_days 는 그 검토가 돌아보는 날수로, review_at 바로 앞 날짜부터 거꾸로 세요(7이면 10월 26일 0시 검토는 10월 19일부터 25일까지). 큰 데이터는 4월 13일부터 10월 26일까지 매주 월요일 0시 검토 29번이고, 시작용은 10월 26일 검토 한 번이에요.
전체 1행 가운데 앞 1행이에요.
| review_id | review_at | lookback_days |
|---|---|---|
| BR-20261026 | 2026-10-26T00:00:00-07:00 | 7 |
1행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 29행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "광고 예산 검토 한 번. 키는 review_id.",
"additionalProperties": false,
"required": [
"review_id",
"review_at",
"lookback_days"
],
"properties": {
"review_id": {
"type": "string",
"pattern": "^BR-[0-9]{8}$",
"description": "검토 번호(BR-검토 날짜). 이 표의 키예요."
},
"review_at": {
"type": "string",
"format": "date-time",
"description": "검토 시각. 미국 서부 시간(-07:00) ISO 8601. 이 기능이 '지금'으로 삼는 시각이에요."
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"description": "이 검토가 돌아보는 날수. review_at 바로 앞 날짜부터 거꾸로 세요."
}
}
}근거: 매출·광고·재고·재무·물류 데이터를 읽고 에이전트가 제안하고 사람이 승인하면 실행까지 이어지는 회사의 AI 운영 OS(Mantle)