알고케어
경력근거: 2억 알을 토출하는 동안 건강 이상 사례는 0건이었습니다
이 백엔드가 보여주는 것은 에이전트 출력과 규칙 검증을 잇는 파이프라인, 성분 상한·금기·합산이라는 결정론 규칙 엔진, 근거 인용 토출 명령과 오프라인 디바이스 상태 관리 기술이며, 약학이나 임상 영양 전문성을 주장하지 않습니다. 다만 이 사슬이 말이 되려면 알고케어라는 맥락, 즉 AI 웰니스 에이전트 마이알고가 그날 필요한 영양을 설계하고 IoT 디바이스가 그 자리에서 토출하는 제품이 있어야 의미가 있습니다. ‘2억 알을 토출하는 동안 건강 이상 사례는 0건’ 이라는 안전 자산은 조합이 성분 상한과 금기를 절대 넘기지 않아야 지켜지고, 그 상한·금기 규칙 형태가 있어야 검증 엔진이 구체화됩니다. 실제 성분 안전 기준은 랩스의 약사·연구원이 정해야 하고, 면접에서 모르는 부분은 모른다고 말하는 편이 낫습니다.
‘B2B·B2C 제품 백엔드 서버 개발 및 운영, 만든 사람이 배포·운영·대응까지 책임(인프라 포함)’ 이 첫 주요업무입니다. 조합 검증부터 토출까지 도는 서버를 직접 설계하고 배포·운영하는 게 보여줄 대상입니다.
‘에이전트 API 설계 및 통합, AI 기능을 실제 서비스로 구현’ 을 요구하고 우대사항에 RAG·MCP·Agent 를 둡니다. 마이알고 에이전트의 조합 설계 출력을 규칙 검증 파이프라인에 통합하는 각도와 맞습니다.
회사가 IoT 디바이스로 영양을 토출하고, 우대사항에 ‘실시간 동기화·offline-first·분산 환경 상태 관리’ 와 ‘IoT·디바이스 연동’ 을 둡니다. 토출 명령을 오프라인 디바이스에 안전하게 내려보내는 상태 관리가 필요합니다.
사용자 건강 데이터와 복용 맥락을 받아 마이알고 에이전트가 설계한 오늘의 영양제 조합을, 성분별 일일상한과 금기 조합, 중복 성분 합산을 규칙으로 검증해 안전 기준을 넘기면 자동으로 줄이거나 빼고, 어떤 규칙에 걸렸는지 근거와 함께 IoT 디스펜서 토출 명령을 만드는 백엔드입니다. 조합 설계는 에이전트가 제안하되 안전 판정은 규칙(상한·금기·합산)으로 결정하며, LLM 은 조정 사유를 사용자용 문구로 다듬는 보조만 맡습니다. 건강 데이터가 부족하면 임의로 용량을 늘리지 않고 보류합니다. 1주차만으로 완성품이고, 오프라인 디바이스 동기화(2주차)와 검토자 대조·관측성(3주차)로 키웁니다. (근거는 채용공고 정렬입니다.)
알고케어 가정용 제품 백엔드 엔지니어입니다. 마이알고가 제안한 영양 조합이 성분 상한을 넘지 않는지, 금기 조합이 아닌지 사람이 눈으로 확인하며 토출 로직을 손보던 일을 끝내고, 조합을 규칙으로 검증해 안전하지 않으면 자동 조정하고 근거와 함께 토출 명령을 받되 데이터가 부족하면 단정 대신 보류로 받고 싶은 사람입니다.
에이전트가 설계한 조합을 성분 마스터의 상한·금기·합산 규칙으로 검증하면, (a) 일일상한 초과와 금기 조합이 규칙으로 잡히고, (b) 어떤 성분이 어느 규칙을 얼마나 넘겼는지 근거와 함께 조정된 토출 명령이 만들어지며, (c) 건강 데이터가 부족하면 임의로 늘리지 않고 보류로 남아, 2억 알을 토출하는 동안 건강 이상 0건이라는 안전 기준을 코드로 지킬 수 있다는 걸 보여줍니다.
에이전트가 설계한 영양 조합을 성분 마스터의 일일상한·금기·중복 합산 규칙으로 검증해 안전하지 않으면 자동 조정하고, 근거와 함께 토출 명령을 만드는 동작하는 백엔드입니다. 디바이스 연동은 토출 명령을 내려보내는 사내 API 가정으로 시작합니다(실기기 통신은 밖의 것).
디바이스가 오프라인일 때 토출 명령을 큐에 쌓고 재연결 시 순서대로 동기화하되, 그 사이 조합이 바뀌면 낡은 명령을 덮어써 이중 토출을 막는 offline-first 상태 관리 단계입니다.
랩스 약사 페르소나 2명이 조정 결과가 타당한지 라벨링하고, 규칙별 차단·조정 건수와 토출 실패·재시도를 로그·알림으로 보는 관측성 대시보드입니다.
30건의 에이전트 조합을 넣으면, 상한·금기·합산을 검증해 위반 시 자동 조정하고 근거와 함께 토출 명령을 만드는 걸 시연합니다
조정 내역의 위반 규칙과 근거 성분이 전부 실재하고 합산 계산이 규칙과 일치하는지 자동 대조합니다. 근거 없는 조정과 규칙에 없는 증량은 차단되는 걸 보여줍니다
일부러 심은 위반(상한 초과·금기 조합) 30종 중 규칙이 잡아낸 비율과, 안전한데 잘못 조정한 과잉 차단 비율을 보여줍니다
내가 만든 정답 30건 중 검증·조정이 일치한 게 26건(86%). 단, 정답과 데이터를 모두 내가 만든 합성 기준이라 ‘성능 검증’ 이 아니라 ‘데모 조건 동작’ 임을 밝힙니다
위 수치는 전부 작성자가 만든 더미데이터 자가채점이며, 실제 성분 안전성과 조합 타당성은 알고케어 실 성분 데이터와 랩스 약사·연구원이 있어야 측정 가능합니다. 이 백엔드는 그 검증을 바로 돌릴 수 있는 상태까지 만듭니다.
이건 고객·실데이터 없이 혼자 만든 포트폴리오라, 수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서 ‘데모 동작 + 실검증 준비 상태’ 로 솔직히 설명합니다
정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. 결측 건강 데이터·상한에 딱 걸친 경계 용량·미등록 성분·표기 흔들림을 더미에 일부러 섞어, 깔끔한 데이터만 다루는 게 아님을 보여줍니다
이 포트폴리오가 보여주는 것은 규칙 검증 엔진·에이전트 통합·오프라인 상태 관리 기술이지 약학이나 임상 영양 전문성이 아닙니다. 성분 안전 기준은 랩스 약사·연구원이 정해야 하고, 면접에서 모르는 부분은 모른다고 말하는 편이 낫습니다
상한·금기는 규칙으로 잡지만 성분 상호작용은 규칙 밖 조합이 있을 수 있습니다. 규칙에 없으면 임의로 판단하지 않고 보류·검토자 확인으로 넘겨 과신을 막습니다
실제 도입 시 달라지는 것 명시합니다. 실 성분 규제 값·금기 목록은 더미와 다르므로 규칙 세트를 다시 맞춰야 하고, 검토자도 랩스 약사로 교체해야 합니다(도입 단계 과제로 분리)
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
영양 성분 마스터. 조합 검증의 규칙 원천입니다. 성분 일일상한·단위·금기 조합을 담고, 상한 결측·미등록 성분·표기 불일치(비타민C와 아스코르브산)를 일부러 섞어, 규칙이 미등록은 ‘미매핑’ 으로 알리고 표기 흔들림을 정규화하는지 보여줍니다.
| ingredient_id | name_raw | name_id | unit | daily_upper_limit | contraindicated_with |
|---|---|---|---|---|---|
| ing_vitc | 비타민C | vitamin_c | mg | 2,000 | [] |
| ing_vitc2 | 아스코르브산 | vitamin_c | mg | 2,000 | [] |
| ing_iron | 철분 | iron | mg | 45 | ["calcium"] |
| ing_ca | 칼슘 | calcium | mg | 2,500 | ["iron"] |
| ing_vitd | 비타민D | vitamin_d | IU | 4,000 | [] |
아래 JSON Schema 에 맞는 영양 성분 마스터 25행 JSON 배열로 생성합니다.
{"type":"object","properties":{"ingredient_id":{"type":"string"},"name_raw":{"type":"string"},"name_id":{"type":["string","null"]},"unit":{"type":"string"},"daily_upper_limit":{"type":["number","null"]},"contraindicated_with":{"type":"array","items":{"type":"string"}}},"required":["ingredient_id","name_raw","unit","contraindicated_with"]}
쉬운 데이터만 만들지 말 것. 하드 케이스 의도적 혼입: (1) daily_upper_limit 가 null 인 상한 미정 성분 1~2건(상한 없어 검증 보류 대상), (2) name_id 가 null 인 미등록 성분 1건(정규화 안 된 신규 성분), (3) 같은 성분의 별칭 표기(비타민C와 아스코르브산이 같은 name_id 로 매핑)를 넣어 표기 정규화 필요, (4) 서로 금기인 성분 쌍(철분과 칼슘 등)을 contraindicated_with 로 상호 연결. JSON 배열만.{"type":"object","properties":{"ingredient_id":{"type":"string"},"name_raw":{"type":"string"},"name_id":{"type":["string","null"]},"unit":{"type":"string"},"daily_upper_limit":{"type":["number","null"]},"contraindicated_with":{"type":"array","items":{"type":"string"}}},"required":["ingredient_id","name_raw","unit","contraindicated_with"]}사용자별 오늘의 복용 맥락. 조합 검증의 입력입니다. 이미 복용 중인 성분량·건강 데이터·알러지를 담고, 건강 데이터 결측·상한에 딱 걸친 경계 복용량·과다 요청을 섞어, 데이터 부족 시 임의 증량 없이 보류하고 경계·초과를 규칙으로 잡는지 보여줍니다.
| user_id | already_taken | health_score | allergies |
|---|---|---|---|
| u_001 | [{"name_id":"vitamin_c","amount":1500}] | 72 | [] |
| u_002 | [{"name_id":"iron","amount":30},{"name_id":"calcium","amount":500}] | 60 | [] |
| u_003 | [{"name_id":"vitamin_c","amount":2000}] | 55 | [] |
| u_004 | [] | — | [] |
| u_005 | [{"name_id":"magnesium","amount":300}] | 80 | ["omega_3"] |
아래 JSON Schema 에 맞는 사용자 복용 맥락 20행 JSON 배열로 생성합니다.
{"type":"object","properties":{"user_id":{"type":"string"},"already_taken":{"type":"array","items":{"type":"object","properties":{"name_id":{"type":"string"},"amount":{"type":"number"}}}},"health_score":{"type":["number","null"]},"allergies":{"type":"array","items":{"type":"string"}}},"required":["user_id","already_taken","allergies"]}
쉬운 데이터만 만들지 말 것. 하드 케이스 의도적 혼입: (1) health_score 가 null 인 건강 데이터 결측 1~2건(데이터 부족으로 증량 보류 테스트), (2) already_taken 이 상한에 딱 걸친 경계 복용량(비타민C 2000mg 등) 1~2건, (3) 서로 금기인 성분을 이미 함께 복용 중인 사용자 1건(철분·칼슘 동시), (4) allergies 에 성분을 넣어 그 성분이 조합에서 빠져야 하는 사용자 1건. JSON 배열만.{"type":"object","properties":{"user_id":{"type":"string"},"already_taken":{"type":"array","items":{"type":"object","properties":{"name_id":{"type":"string"},"amount":{"type":"number"}}}},"health_score":{"type":["number","null"]},"allergies":{"type":"array","items":{"type":"string"}}},"required":["user_id","already_taken","allergies"]}| Python | FastAPI 조합 검증·토출 명령 서버(에이전트 출력 수신과 규칙 엔진 구현) |
| AWS | 1주차 기본 배포 및 2주차부터 ECS 로 검증 서버·큐 배포·운영(자격요건의 퍼블릭 클라우드 반영) |
| GCP | 멀티 클라우드 가정에서 GKE 컨테이너 배포 대안으로 매핑(우대의 컨테이너 기반 환경 반영) |
| Azure | 자격요건이 AWS·GCP·Azure 를 병기하므로 클라우드 중립 배포 스크립트로 셋 다 대응 가능함을 표시 |
| RAG | 성분 상한·금기 근거 문서를 조정 사유 문구에 인용하는 검색 보강(우대의 RAG·Context Engineering 반영) |
| Claude | Claude Haiku 로 규칙이 내린 조정 사유를 사용자용 안내 문구로 변환(안전 판정은 규칙이 결정) |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 2주차(오프라인 디바이스 동기화)로 진행합니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우면 3주차(검토자 대조·관측성)로 진행합니다.
검증·조정된 오늘의 토출 계획. 최종 조합(성분·용량)·조정 내역(어느 성분을 왜 줄였는지)·근거 규칙(violated_rules)·안전 여부(is_safe)·보류 여부를 한 스키마에 담아, 규칙 근거 없이 용량을 늘리지 않고 데이터 부족 시 보류했는지 객관 검증합니다.
{"type":"object","properties":{"user_id":{"type":"string"},"status":{"type":"string","enum":["dispense","adjusted","held"]},"final_combo":{"type":"array","items":{"type":"object","properties":{"name_id":{"type":"string"},"amount":{"type":"number"}}}},"adjustments":{"type":"array","items":{"type":"object","properties":{"name_id":{"type":"string"},"from":{"type":"number"},"to":{"type":"number"},"reason":{"type":"string"}}}},"violated_rules":{"type":"array","items":{"type":"string"}},"message":{"type":"string"},"is_safe":{"type":"boolean"}},"required":["user_id","status","final_combo","violated_rules","message","is_safe"]}[
{
"input_ref": "u_003: 이미 비타민C 2000mg 복용 중인데 에이전트가 비타민C 500mg 추가 제안(상한 2000 초과)",
"output": {
"user_id": "u_003",
"status": "adjusted",
"final_combo": [
{
"name_id": "vitamin_c",
"amount": 0
}
],
"adjustments": [
{
"name_id": "vitamin_c",
"from": 500,
"to": 0,
"reason": "이미 복용한 2000mg 로 일일상한에 도달해 추가 토출을 0 으로 조정"
}
],
"violated_rules": [
"daily_upper_limit:vitamin_c"
],
"message": "오늘 비타민C는 이미 하루 권장 상한만큼 드셔서 추가로 토출하지 않았습니다.",
"is_safe": true
}
},
{
"input_ref": "u_002: 철분·칼슘을 함께 복용 중인데 에이전트가 둘 다 추가 제안(금기 조합)",
"output": {
"user_id": "u_002",
"status": "adjusted",
"final_combo": [
{
"name_id": "iron",
"amount": 15
}
],
"adjustments": [
{
"name_id": "calcium",
"from": 500,
"to": 0,
"reason": "철분과 칼슘은 흡수를 방해하는 금기 조합이라 같은 시각 토출에서 칼슘을 제외"
}
],
"violated_rules": [
"contraindicated:iron+calcium"
],
"message": "철분과 칼슘은 함께 드시면 흡수가 떨어져 이번 토출에서는 칼슘을 뺐습니다.",
"is_safe": true
}
},
{
"input_ref": "u_004: 건강 데이터(health_score) 결측 → 증량 없이 보류",
"output": {
"user_id": "u_004",
"status": "held",
"final_combo": [],
"adjustments": [],
"violated_rules": [],
"message": "오늘 건강 데이터가 아직 들어오지 않아 임의로 조합을 정하지 않고 토출을 보류했습니다. 데이터가 들어오면 다시 설계합니다.",
"is_safe": true
}
}
][자동 검증] 1. 출력이 스키마를 통과하는가(형식·필수 필드). 2. final_combo 의 각 성분 합산(already_taken + 토출량)이 daily_upper_limit 를 넘지 않는가(LLM 이 상한을 못 넘김). 3. violated_rules 의 규칙 키가 supplement_ingredient 규칙에 실재하고 adjustments 근거와 일치하는가(지어낸 근거 차단). 4. health_score 결측이나 상한 미정(daily_upper_limit=null) 성분이면 status=held 로 보류하고, 규칙에 없는 증량이 없는가. [수동 검증] 1. 랩스 약사 페르소나 2명이 조정 타당성 라벨링 → bootstrap Cohen’s κ(두 사람 답이 우연 이상으로 일치하는 정도) 하한 ≥ 0.6. 2. 금기 조합·상한 초과 조정 5% 사람 점검.
포트폴리오가 “무엇을 만들지”라면, 시나리오 테스트는 “현장에서 어떻게 판단·소통할지” 입니다. 실제 이 채용공고 맥락의 대본을 읽고 무엇을 물어야 할지 직접 써봅니다.