세븐픽쳐스
경력근거: 복잡한 오프라인 도메인(모임·회차·일정·장소·정산)을 정확한 데이터 모델과 API로 설계합니다
※ 실제 산출물이 아닌 AI 예측 시안입니다.
이 도구가 보여주는 것은 제약이 얽힌 오프라인 도메인 데이터 모델링과 규칙 기반 매칭·제약 검증, LLM 출력 검증·폴백 기술이며, 커뮤니티 운영이나 오프라인 모임 기획 전문성을 주장하지 않습니다. 다만 이 사슬이 말이 되려면 세븐픽쳐스 동행이라는 맥락, 즉 모임·회차·정산이 얽힌 오프라인 관계 플랫폼이라는 문제가 있어야 의미가 있습니다. ‘규칙을 어긴 매칭은 문구로도 통과 못 한다’ 는 각도는 옮길 수 있지만, 정원·시간·장소가 얽힌 모임 데이터 형태가 있어야 제약 규칙이 구체화됩니다. 실제 모임 만족도의 깊이는 운영·현장 데이터가 있어야 하고, 면접에서 모르는 부분은 모른다고 말하는 편이 낫습니다.
‘모임·회차·일정·장소·정산 같은 복잡한 오프라인 도메인을 정확한 데이터 모델과 API 로 설계’ 가 주요업무입니다. 제약이 얽힌 매칭이 이 데이터 모델을 그대로 씁니다.
‘LLM 을 제품 기능의 재료로, 콘텐츠 생성·매칭·운영 판단 자동화 파이프라인이 프로덕션에 상시 편입’ 이 업무입니다. 사유 문구 생성과 출력 검증·폴백이 필요합니다.
‘문제 정의부터 배포, 지표 확인까지 하나의 사이클을 완결’ 이 업무입니다. 매칭 규칙·차단·지표를 한 사람이 끝까지 만드는 제품이 필요합니다.
참가 신청과 모임 회차(정원·시간·장소·취향 태그)를 받아, 정원·시간 겹침·취향 적합 같은 제약을 규칙으로 맞춰 참가자를 회차에 배정하고, 정원 초과·시간 겹침 같은 제약 위반 배정은 차단합니다. 배정은 규칙(제약 만족)으로 결정되고 LLM 은 ‘왜 이 모임을 추천하는지’ 사유 문구를 붙이는 보조만 맡아, 규칙을 어긴 매칭이 그럴듯한 문구로 통과하지 못하게 합니다. 1주차만으로 완성품이고, 매칭 검토(2주차)·정산·노쇼 운영 자동화(3주차)로 키웁니다. (근거는 채용공고 정렬입니다.)
세븐픽쳐스 동행 PE. 회차마다 정원·시간·취향을 손으로 맞춰 참가자를 배정하고 겹침을 확인하던 운영을 끝내고, 제약을 규칙으로 맞춘 배정을 사유와 함께 받되 위반 배정은 걸러진 상태로 받고 싶은 사람입니다.
모임 제약을 규칙으로 두고 배정하게 하면, (a) 정원·시간·취향 제약을 만족하는 배정이 규칙으로 만들어지고, (b) 정원 초과·시간 겹침 배정이 차단되며, (c) LLM 은 배정 사유 문구만 붙여 규칙 위반을 그럴듯하게 포장하지 못해, 운영자가 겹침 전수 확인 없이 신뢰할 매칭을 만든다는 걸 보여줄 수 있습니다.
참가 신청과 회차를 받아 정원·시간·취향 제약을 규칙으로 맞춰 배정하고, 정원 초과·시간 겹침을 차단하며, 배정에 추천 사유 문구를 붙이는 동작하는 도구입니다. 사유 생성이 규칙 매칭을 바꾸지 못합니다.
커뮤니티 운영자 페르소나 2명이 배정·사유가 타당한지, 규칙이 놓친 겹침이 없는지 라벨링하고, 제약 위반 통과·미배정 비율을 대조하는 대시보드입니다.
회차별 참가 확정을 정산 데이터와 잇고, 노쇼·취소를 반영해 대기자를 규칙으로 승급하는 운영 자동화 단계입니다.
신청·회차 30세트를 넣으면, 제약을 맞춰 배정하고 위반은 차단하며 사유 문구를 붙이는 걸 시연합니다
배정이 정원·시간·취향 제약을 실제 만족하는지 자동 대조합니다. 규칙을 어긴 배정은 LLM 사유가 있어도 차단되는 걸 보여줍니다
일부러 심은 시간 겹침·정원 초과 30종을 넣으면 100% 차단되는 걸 보여줍니다
내가 만든 정답 30세트 중 배정·사유가 일치한 게 26세트(87%). 단, 정답과 데이터를 모두 내가 만든 합성 기준이라 ‘성능 검증’ 이 아니라 ‘데모 조건 동작’ 임을 밝힙니다
위 수치는 전부 작성자가 만든 더미데이터 자가채점이며, 실제 모임 만족도·매칭 품질은 세븐픽쳐스 실 회차 데이터와 실 운영자, 현장 노쇼가 있어야 측정 가능합니다. 이 도구는 그 검증을 바로 돌릴 수 있는 상태까지 만듭니다.
이건 운영·실데이터 없이 혼자 만든 포트폴리오라, 수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서 ‘데모 동작 + 실검증 준비 상태’ 로 솔직히 설명합니다
정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. 시간 겹침·정원 경계·취향 결측을 더미에 일부러 섞어, 쉬운 매칭만 푸는 게 아님을 보여줍니다
이 포트폴리오가 보여주는 것은 제약 데이터 모델·매칭·LLM 출력 검증 기술이지 커뮤니티 운영·모임 기획 전문성이 아닙니다. 실제 만족도는 현장 데이터가 있어야 하고, 면접에서 모르는 부분은 모른다고 말하는 편이 낫습니다
취향 적합은 주관적이라 규칙으로 다 못 잡습니다. 정원·시간 같은 객관 제약은 규칙으로 확정하고, 취향은 가중치·사유로만 다루며 단정하지 않습니다
실제 도입 시 달라지는 것 명시합니다. 실 회차 규모·취향 태그 체계는 더미와 다르므로 제약 규칙·취향 가중을 다시 맞춰야 하고, 검토자도 실 운영자로 교체해야 합니다(도입 단계 과제로 분리)
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
모임 회차. 매칭의 제약(정원·시간·장소·취향 태그)을 담습니다. 시간 겹치는 회차·정원 경계·취향 태그 결측을 일부러 섞어, 규칙이 겹침·초과를 잡고 취향 결측을 정직하게 다루는지 보여줍니다.
| gathering_id | title | start | end | place | capacity | tags |
|---|---|---|---|---|---|---|
| g_01 | 성수 러닝 크루 | 2026-05-10T08:00:00 | 2026-05-10T09:30:00 | 성수 | 6 | ["운동","아침"] |
| g_02 | 북클럽 심야편 | 2026-05-10T20:00:00 | 2026-05-10T22:00:00 | 합정 | 8 | ["독서","저녁"] |
| g_03 | 브런치 모임 | 2026-05-10T08:30:00 | 2026-05-10T10:00:00 | 성수 | 4 | ["음식","아침"] |
| g_04 | 보드게임 데이 | 2026-05-11T14:00:00 | 2026-05-11T17:00:00 | 홍대 | 5 | [] |
| g_05 | 전시 관람 | 2026-05-11T14:00:00 | 2026-05-11T16:00:00 | 삼청 | 3 | ["예술","낮"] |
아래 JSON Schema 에 맞는 모임 회차 20행 JSON 배열로 생성합니다.
{"type":"object","properties":{"gathering_id":{"type":"string"},"title":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"place":{"type":"string"},"capacity":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}}},"required":["gathering_id","title","start","end","place","capacity","tags"]}
쉬운 데이터만 만들지 말 것. 하드 케이스 의도적 혼입: (1) 시간이 겹치는 회차 2~3쌍(같은 참가자를 둘 다 배정하면 안 됨), (2) capacity 가 2처럼 작아 초과가 쉽게 나는 회차 1~2개, (3) tags 가 빈 배열인 취향 결측 회차 1~2개. JSON 배열만.{"type":"object","properties":{"gathering_id":{"type":"string"},"title":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"place":{"type":"string"},"capacity":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}}},"required":["gathering_id","title","start","end","place","capacity","tags"]}참가 신청. 참가자의 희망 회차·취향·가능 시간을 담습니다. 여러 겹침 회차 동시 희망·취향 결측·불가 시간 위반을 섞어, 규칙이 겹침을 막고 취향 결측을 정직하게 다루는지 보여줍니다.
| member_id | wish_gatherings | tags | unavailable |
|---|---|---|---|
| m_1 | ["g_01","g_03"] | ["운동","아침"] | [] |
| m_2 | ["g_01","g_08"] | ["운동"] | [] |
| m_3 | ["g_04","g_05"] | ["예술"] | [] |
| m_4 | ["g_07"] | [] | [] |
| m_5 | ["g_02"] | ["독서"] | ["2026-05-10T08:00:00/2026-05-10T12:00:00"] |
아래 JSON Schema 에 맞는 참가 신청 25행 JSON 배열로 생성합니다. wish_gatherings 는 gathering 의 id.
{"type":"object","properties":{"member_id":{"type":"string"},"wish_gatherings":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"unavailable":{"type":"array","items":{"type":"string"}}},"required":["member_id","wish_gatherings","tags"]}
쉬운 데이터만 만들지 말 것. 하드 케이스 의도적 혼입: (1) 시간이 겹치는 두 회차를 동시에 희망하는 참가자 2~3명(하나만 배정돼야 함), (2) tags 가 빈 배열인 취향 결측 1~2명, (3) 희망 회차와 겹치는 unavailable 을 가진 참가자 1~2명(불가 시간 위반 배정 차단 테스트), (4) 정원 2 인 회차에 3명 이상 몰리게. JSON 배열만.{"type":"object","properties":{"member_id":{"type":"string"},"wish_gatherings":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"unavailable":{"type":"array","items":{"type":"string"}}},"required":["member_id","wish_gatherings","tags"]}| TypeScript | 매칭 도메인 타입(모임·회차·신청·제약) 공유 |
| Node.js | 제약 매칭·사유 생성 오케스트레이션 서버 |
| MySQL | gathering / member_signup / assignment 단일 진실원과 제약(정원·유니크) |
| Next.js | 운영자용 배정·사유·차단 사유 확인 화면 |
| Flutter | 참가자 앱 쪽 추천 모임·사유 표시 |
| GCP | 2주차부터 Cloud Run 으로 배포·운영(우대의 GCP 반영) |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 2주차(매칭 타당성 검토)로 진행합니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우면 3주차(정산·노쇼 운영 자동화)로 진행합니다.
참가자 배정 결과. 배정(assignment)·만족한 제약(satisfied)·차단된 위반(blocked)·미배정 사유(unassigned)·추천 사유 문구(reason)를 한 스키마에 담아, 규칙을 어긴 배정을 사유 문구로 통과시키지 않았는지 객관 검증합니다.
{"type":"object","properties":{"member_id":{"type":"string"},"assigned":{"type":["string","null"]},"satisfied":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"object","properties":{"gathering_id":{"type":"string"},"violation":{"type":"string","enum":["capacity","time_overlap","unavailable"]}},"required":["gathering_id","violation"]}},"reason":{"type":["string","null"]},"unassigned_reason":{"type":["string","null"]}},"required":["member_id","assigned","satisfied","blocked"]}[
{
"input_ref": "m_1: g_01(러닝)·g_03(브런치) 희망, 시간 겹침",
"output": {
"member_id": "m_1",
"assigned": "g_01",
"satisfied": [
"capacity_ok",
"tag_match:운동",
"tag_match:아침"
],
"blocked": [
{
"gathering_id": "g_03",
"violation": "time_overlap"
}
],
"reason": "운동·아침 취향이 맞고 정원이 남은 성수 러닝 크루로 배정했습니다. 시간이 겹치는 브런치 모임은 함께 배정할 수 없어 제외했습니다.",
"unassigned_reason": null
}
},
{
"input_ref": "m_7·m_8: g_07(커피, 정원 2)에 3명 몰림",
"output": {
"member_id": "m_8",
"assigned": null,
"satisfied": [],
"blocked": [
{
"gathering_id": "g_07",
"violation": "capacity"
}
],
"reason": null,
"unassigned_reason": "커피 클래스 정원(2)이 이미 찼습니다. 대기자로 올리고 취소 발생 시 규칙에 따라 승급합니다."
}
},
{
"input_ref": "m_5: g_02 희망이나 불가 시간 위반",
"output": {
"member_id": "m_5",
"assigned": "g_02",
"satisfied": [
"capacity_ok",
"tag_match:독서"
],
"blocked": [],
"reason": "독서 취향이 맞고 불가 시간(오전)과 겹치지 않는 심야 북클럽으로 배정했습니다.",
"unassigned_reason": null
}
}
][자동 검증] 1. 출력이 스키마를 통과하는가(형식·필수 필드). 2. assigned 회차가 정원·시간 겹침·불가 시간 제약을 실제 만족하는가(규칙 재계산과 일치). 3. blocked 의 violation 이 실제 제약 위반과 일치하고, 위반 회차가 assigned 로 새어나가지 않았는가(사유 문구로 위반 통과 차단). 4. reason 이 satisfied 제약과 일치하는가(근거 밖 사유 검출). 미배정이면 unassigned_reason 이 채워졌는가. [수동 검증] 1. 커뮤니티 운영자 페르소나 2명이 배정·사유 타당성 라벨링 → bootstrap Cohen’s κ 하한 ≥ 0.6. 2. 제약 위반 통과 5% 사람 점검.