디오비스튜디오
경력근거: AI 모델 추론 API 연동 및 입출력 처리 로직 개발
※ 실제 산출물이 아닌 AI 예측 시안입니다.
디오비스튜디오는 자사 얼굴 생성·변환 모델을 데뷧타이라는 소비자용 앱으로 직접 서비스합니다. 지브리·애니메·카툰·뷰티 같은 스타일이 앱 안에 나란히 있고, Google Play 다운로드 5만 건을 넘겼으며 2026년에는 일본 아이비시스템과 현지화 협약을 맺어 나라를 늘리는 중입니다. 스타일이 늘고 나라가 늘수록 요청 하나가 어느 모델의 어느 버전으로 가야 하는지는 사람 머릿속이 아니라 코드가 알아야 합니다. 공고도 그 자리를 그대로 적어, 추론 API 연동과 입출력 처리 로직을 모델 버전·배포 상태 관리와 한 사람 업무로 묶습니다. 이 포트폴리오는 모델 배포 상태와 스타일 규격을 서비스 요청과 잇는 백엔드 설계를 보여줍니다. 얼굴 생성 모델 자체의 학습이나 공고가 함께 적은 의료·임상 데이터 처리의 전문성은 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
주요업무가 자사 AI 모델을 웹 서비스에 붙이는 일을 추론 API 연동과 입출력 처리 로직으로 나눠 적습니다. 모델을 만드는 자리가 아니라 모델과 서비스 사이에서 요청이 오가는 길을 세우는 자리입니다.
모델 버전, 평가 결과, 배포 상태, 성능 지표 관리가 프론트엔드·백엔드 구축과 한 목록에 들어 있습니다. 어느 버전이 지금 나가고 있는지를 서비스 코드가 알아야 한다는 뜻입니다.
데이터 오류와 모델 결과를 분석해 개선 방안을 도출하는 일, 데이터 구축 기준과 품질관리 프로세스를 세우는 일이 함께 적혀 있습니다. 결과를 받아 쓰는 데서 그치지 않고 무엇이 왜 어긋났는지 정리해 다음 기준으로 만드는 자리입니다.
데뷧타이에 사진이 올라오면 그 요청을 어느 스타일 모델의 어느 버전으로 보낼지 접수 시점에 정하고, 보내지 못한 요청은 왜 막혔는지 사유별로 세우는 관리자 페이지입니다. 사진 크기와 얼굴 수, 출시 국가, 모델 배포 상태를 견주는 규칙이 판정을 정하고, 이용자에게 나갈 재업로드 안내 문구만 모델이 씁니다.
데뷧타이에 사진을 올린 이용자에게 변환 결과를 돌려주는 앱 서비스 운영 담당자 — 스타일마다 요구하는 사진 조건과 출시 국가가 다르고 모델 버전은 수시로 갈리는데, 어느 요청이 왜 결과를 못 받았는지는 이용자 문의가 들어온 뒤에야 안다
요청이 빈손으로 돌아오는 이유는 모델이 약해서가 아니라, 스타일마다 다른 사진 조건과 출시 국가, 그리고 수시로 갈리는 모델 버전이 요청을 받는 자리에서 한 번에 견줘지지 않기 때문입니다. 접수 시점에 셋을 함께 견주면 GPU 시간을 쓰기 전에 되돌리고, 이용자에게는 무엇을 고쳐 다시 올리면 되는지 바로 알립니다.
운영 담당자가 쓰는 화면 하나가 돕니다. 변환 요청과 스타일 규격, 모델 배포 상태를 올리면 요청마다 적용 모델과 버전이 정해지고, 못 보낸 요청은 사유별로 묶입니다. 실제 추론 API 는 붙이지 않고 스타일 규격과 배포 상태를 사내 API 응답으로 가정해 시작하며, 실물 연동은 3주차로 미룹니다.
정답을 붙인 요청 60건으로 판정 일치율을 자동으로 내고 어긋난 유형을 리포트로 남깁니다. Docker 이미지로 만들어 2주차부터 클라우드에서 운영하고, 밀어 넣을 때마다 판정 규칙 테스트가 도는 배포 흐름을 붙입니다.
판정을 통과한 요청만 실제 추론 API 로 보내고 결과와 걸린 시간을 되받아 기록합니다. 스타일별로 어떤 사유가 얼마나 나오는지, 모델 버전이 바뀐 뒤 실패율이 어떻게 움직였는지를 지표 화면으로 냅니다.
운영 담당자가 요청과 스타일 규격, 배포 상태를 올리면 요청마다 적용 모델과 버전이 정해지고, 못 보낸 요청은 근거 수치와 함께 사유별로 묶입니다.
얼굴수가 비어 있는 요청, 세로 조건이 비어 있는 스타일, 앱이 받는 최소값 256픽셀로 올라온 경계 요청을 섞은 30종을 넣어도 화면이 죽지 않고 판정 다섯 갈래 중 하나로 떨어집니다.
모델이 배포중이 아닌 스타일에서 직전 배포 버전이 골라지고, 직전 버전조차 비어 있는 스타일은 접수를 막는 것을 보여줍니다.
정답을 붙인 요청 60건으로 판정 다섯 갈래의 일치율을 냅니다. 정답과 데이터를 모두 작성자가 만든 합성 기준이라 성능 검증이 아니라 데모 조건 동작입니다.
위 수치는 더미데이터 자가채점이고, 실제로 어느 요청이 왜 실패하는지는 데뷧타이의 실제 접수 로그와 모델 배포 이력이 있어야 측정됩니다. 이 포트폴리오는 그 측정을 바로 돌릴 수 있는 상태로 만듭니다.
수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서는 데모 동작과 실검증 준비 상태로 솔직히 설명합니다.
정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. 얼굴수가 비어 있는 요청, 세로 조건이 비어 있는 스타일, 앱 최소값인 256픽셀 경계 요청, 카탈로그가 두 줄로 갈린 스타일을 더미에 일부러 섞어 쉬운 문제만 푸는 함정을 피합니다.
사진 크기와 얼굴 수가 조건을 넘겼다고 결과가 예쁘게 나온다는 뜻은 아닙니다. 이 판정은 요청을 보내도 되는지까지만 말하고 변환 품질은 다루지 않으므로, 화면에도 근거 수치를 항상 같이 둡니다.
직전 배포 버전으로 내보낸 결과는 이용자가 기대한 최신 스타일과 다를 수 있습니다. 어느 버전으로 나갔는지를 요청마다 남겨 두고, 되돌린 버전으로 보낼지 말지는 사람이 정하는 자리를 남깁니다.
실제 도입에서는 스타일이 수십 종으로 늘고 나라마다 심의 기준이 붙습니다. 규격표와 국가 목록을 코드에서 빼 설정으로 옮기는 일은 도입 단계 과제로 분리합니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
데뷧타이에 올라온 변환 요청입니다. 판정의 대상이며 얼굴수가 비어 있는 행과 앱이 받는 최소값인 256픽셀로 올라온 경계 행, 국가 코드를 소문자로 보낸 행을 함께 넣었습니다.
| 요청id | 이용자id | 스타일코드 | 가로픽셀 | 세로픽셀 | 얼굴수 | 접수국가 | 접수시각 |
|---|---|---|---|---|---|---|---|
| REQ-8821 | U-1042 | ST-CARTOON | 1,024 | 1,024 | 1 | KR | 2026-09-05T21:04:12 |
| REQ-8829 | U-1077 | ST-ANIME | 1,024 | 1,024 | 2 | JP | 2026-09-05T21:06:48 |
| REQ-8834 | U-1103 | ST-ANIME | 640 | 480 | 1 | KR | 2026-09-05T21:09:02 |
| REQ-8840 | U-1120 | ST-GHIBLI | 256 | 256 | 1 | KR | 2026-09-05T21:11:37 |
| REQ-8845 | U-1131 | ST-PIXEL | 800 | 600 | — | KR | 2026-09-05T21:13:55 |
아래 JSON Schema 에 맞는 변환 요청 행을 더 만들어 주세요. {"type":"object","properties":{"요청id":{"type":"string"},"이용자id":{"type":"string"},"스타일코드":{"type":"string"},"가로픽셀":{"type":"integer","minimum":256},"세로픽셀":{"type":"integer","minimum":256},"얼굴수":{"type":["integer","null"],"minimum":0},"접수국가":{"type":"string"},"접수시각":{"type":"string"}},"required":["요청id","이용자id","스타일코드","가로픽셀","세로픽셀","얼굴수","접수국가","접수시각"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 얼굴수가 null 인 얼굴 검출 실패 건, (2) 가로픽셀·세로픽셀이 앱이 받는 최소값 256인 경계 건과 스타일 최소 해상도에 한참 못 미치는 건, (3) 접수국가를 소문자 'jp'·'tw' 로 적어 보낸 건, (4) 스타일카탈로그에 없는 스타일코드로 들어온 건, (5) 허용얼굴수를 크게 넘는 단체 사진 건. 생성한 행은 반드시 위 스키마를 통과해야 하며, 타입을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"요청id":{"type":"string"},"이용자id":{"type":"string"},"스타일코드":{"type":"string"},"가로픽셀":{"type":"integer","minimum":256},"세로픽셀":{"type":"integer","minimum":256},"얼굴수":{"type":["integer","null"],"minimum":0},"접수국가":{"type":"string"},"접수시각":{"type":"string"}},"required":["요청id","이용자id","스타일코드","가로픽셀","세로픽셀","얼굴수","접수국가","접수시각"]}스타일마다 요구하는 사진 규격과 쓰는 모델, 출시 국가를 적어 둔 기준표입니다. 최소세로픽셀이 비어 있어 세로를 견주지 않는 스타일과 같은 스타일코드가 두 줄로 갈린 자리를 넣었습니다.
| 스타일코드 | 필요모델 | 최소가로픽셀 | 최소세로픽셀 | 허용얼굴수 | 출시국가 |
|---|---|---|---|---|---|
| ST-CARTOON | MDL-CARTOON-3 | 1,024 | 1,024 | 1 | ["KR","JP","TW","US"] |
| ST-ANIME | MDL-ANIME-2 | 1,024 | 1,024 | 2 | ["KR","JP","TW","US"] |
| ST-GHIBLI | MDL-GHIBLI-1 | 1,280 | 1,280 | 1 | ["KR","JP"] |
| ST-BEAUTY | MDL-BEAUTY-4 | 720 | 720 | 1 | ["KR"] |
| ST-SKETCH | MDL-SKETCH-1 | 640 | 640 | 3 | ["KR","TW"] |
아래 JSON Schema 에 맞는 스타일 카탈로그 행을 더 만들어 주세요. {"type":"object","properties":{"스타일코드":{"type":"string"},"필요모델":{"type":"string"},"최소가로픽셀":{"type":"integer"},"최소세로픽셀":{"type":["integer","null"]},"허용얼굴수":{"type":"integer"},"출시국가":{"type":"array","items":{"type":"string","enum":["KR","JP","TW","US"]}}},"required":["스타일코드","필요모델","최소가로픽셀","최소세로픽셀","허용얼굴수","출시국가"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 최소세로픽셀이 null 이라 세로 조건을 걸지 않는 스타일, (2) 출시국가가 KR 하나뿐인 국내 전용 스타일, (3) 같은 스타일코드에 필요모델이 서로 다른 값으로 둘 있는 행 쌍, (4) 허용얼굴수가 4명인 단체 사진 스타일. 생성한 행은 반드시 위 스키마를 통과해야 하며, 타입을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"스타일코드":{"type":"string"},"필요모델":{"type":"string"},"최소가로픽셀":{"type":"integer"},"최소세로픽셀":{"type":["integer","null"]},"허용얼굴수":{"type":"integer"},"출시국가":{"type":"array","items":{"type":"string","enum":["KR","JP","TW","US"]}}},"required":["스타일코드","필요모델","최소가로픽셀","최소세로픽셀","허용얼굴수","출시국가"]}모델마다 지금 나가는 버전과 배포 상태, 직전에 배포됐던 버전입니다. 직전배포버전이 비어 있는 첫 배포 모델과 롤백·중단 상태의 모델을 함께 넣었습니다.
| 필요모델 | 현재버전 | 배포상태 | 직전배포버전 |
|---|---|---|---|
| MDL-CARTOON-3 | v3.2 | 배포중 | v3.1 |
| MDL-ANIME-2 | v2.8 | 배포중 | v2.7 |
| MDL-GHIBLI-1 | v1.9 | 배포중 | v1.8 |
| MDL-BEAUTY-4 | v4.1 | 롤백 | v4.0 |
| MDL-SKETCH-1 | v1.2 | 배포중 | v1.1 |
아래 JSON Schema 에 맞는 모델 배포 행을 더 만들어 주세요. {"type":"object","properties":{"필요모델":{"type":"string"},"현재버전":{"type":"string"},"배포상태":{"type":"string","enum":["배포중","중단","롤백"]},"직전배포버전":{"type":["string","null"]}},"required":["필요모델","현재버전","배포상태","직전배포버전"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 직전배포버전이 null 인 첫 배포 모델, (2) 배포상태가 롤백인 모델과 중단인 모델, (3) 버전 표기가 v2.10 처럼 두 자리로 올라간 모델. 생성한 행은 반드시 위 스키마를 통과해야 하며, 타입을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"필요모델":{"type":"string"},"현재버전":{"type":"string"},"배포상태":{"type":"string","enum":["배포중","중단","롤백"]},"직전배포버전":{"type":["string","null"]}},"required":["필요모델","현재버전","배포상태","직전배포버전"]}| Python | 판정 규칙과 평가 러너를 맡습니다. 사진 규격과 배포 상태를 견주는 계산이 여기 한 곳에 모입니다. |
| FastAPI | 요청 접수와 판정 조회를 여는 서버입니다. 추론 API 로 넘길 요청도 이쪽에서 큐에 넣습니다. |
| TypeScript | 화면 쪽 타입을 판정 결과 스키마와 같은 모양으로 맞춰, 사유가 늘어도 화면이 조용히 깨지지 않게 합니다. |
| JavaScript | 목록 필터와 상세 펼침처럼 브라우저에서만 도는 동작을 다룹니다. |
| React | 판정별 목록과 요청 상세를 그리는 화면 조각입니다. |
| Next.js | 운영 담당자가 들어와 보는 관리자 화면 전체를 얹습니다. |
| REST | 스타일 규격과 모델 배포 상태를 사내 API 로 받아 오고, 판정 결과를 다시 내줍니다. |
| PostgreSQL | 요청과 스타일 규격, 배포 상태, 판정 결과를 담습니다. 스타일코드와 접수시각에 인덱스를 걸어 최근 접수분 조회를 빠르게 합니다. |
| MLOps | 모델 버전과 배포 상태를 서비스가 읽을 수 있는 표로 두고, 버전이 바뀌면 그 시점부터의 요청이 어느 버전으로 갔는지 남깁니다. |
| Docker | 판정 서버와 화면, 데이터베이스를 한 이미지 묶음으로 만들어 로컬과 서버 동작을 같게 맞춥니다. |
| CI/CD | 밀어 넣을 때마다 판정 규칙 테스트와 정답 세트 러너를 돌리고 통과분만 배포합니다. |
| 클라우드 | 2주차부터 배포와 운영을 맡습니다. 요청 원본과 판정 리포트를 객체 저장소에 남깁니다. |
| LLM | 막힌 요청의 사유를 받아 이용자가 읽을 재업로드 안내 문구를 접수국가의 말로 씁니다. 막을지 말지는 규칙이 이미 정한 뒤입니다. |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 판정이 실제로 맞았는지 정답 세트와 맞춰 보는 단계로 넘어갑니다.
✓ pass → 여기까지도 완결입니다. 다만 추론 API 를 실제로 붙이려면 응답 시간과 실패 재시도를 함께 다뤄야 하므로, 그 준비가 안 되면 3주차는 지표 화면까지만 합니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
판정사유 라벨 · 요청id + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
바로 변환바로 변환사진 조건 미달사진 조건 미달미출시 국가미출시 국가직전 버전으로 변환직전 버전 대체스타일 짝 없음스타일 짝 없음요청 한 건을 어느 모델의 어느 버전으로 보낼지, 못 보낸다면 왜인지를 근거 수치와 함께 남기는 형식입니다. 판정은 규칙이 정하고 안내 문구만 모델이 씁니다.
{"type":"object","properties":{"요청id":{"type":"string"},"스타일코드":{"type":"string"},"판정":{"type":"string","enum":["바로 변환","사진 조건 미달","미출시 국가","직전 버전으로 변환","스타일 짝 없음"]},"적용모델":{"type":["string","null"]},"적용버전":{"type":["string","null"]},"안내문구":{"type":["string","null"]},"evidence":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"agg":{"type":"string","enum":["count","sum","avg","min","max"]},"value":{"type":["string","integer","array","null"]}},"required":["field","value"]}},"사유":{"type":"string"},"hedge":{"type":["string","null"]}},"required":["요청id","스타일코드","판정","적용모델","적용버전","evidence","사유"]}[
{
"요청id": "REQ-8821",
"스타일코드": "ST-CARTOON",
"판정": "바로 변환",
"적용모델": "MDL-CARTOON-3",
"적용버전": "v3.2",
"안내문구": null,
"evidence": [
{
"field": "가로픽셀",
"value": 1024
},
{
"field": "최소가로픽셀",
"value": 1024
},
{
"field": "얼굴수",
"value": 1
},
{
"field": "허용얼굴수",
"value": 1
},
{
"field": "접수국가",
"value": "KR"
},
{
"field": "배포상태",
"value": "배포중"
},
{
"field": "현재버전",
"value": "v3.2"
}
],
"사유": "사진이 카툰 스타일의 최소 해상도와 같고 얼굴도 한 명이며, 한국은 출시 국가에 들어 있습니다. 모델이 배포중이라 현재 버전으로 보냅니다.",
"hedge": null
},
{
"요청id": "REQ-8893",
"스타일코드": "ST-PIXEL",
"판정": "바로 변환",
"적용모델": "MDL-PIXEL-1",
"적용버전": "v1.6",
"안내문구": null,
"evidence": [
{
"field": "접수국가",
"value": "TW"
},
{
"field": "출시국가",
"value": [
"KR",
"JP",
"TW",
"US"
]
},
{
"field": "얼굴수",
"value": 3
},
{
"field": "허용얼굴수",
"value": 4
},
{
"field": "현재버전",
"value": "v1.6"
}
],
"사유": "대만은 픽셀 스타일의 출시 국가에 들어 있고 얼굴 세 명은 허용 네 명 안입니다. 모델이 배포중이라 현재 버전으로 보냅니다.",
"hedge": null
},
{
"요청id": "REQ-8845",
"스타일코드": "ST-PIXEL",
"판정": "바로 변환",
"적용모델": "MDL-PIXEL-1",
"적용버전": "v1.6",
"안내문구": null,
"evidence": [
{
"field": "얼굴수",
"value": null
},
{
"field": "최소세로픽셀",
"value": null
},
{
"field": "가로픽셀",
"value": 800
},
{
"field": "최소가로픽셀",
"value": 512
},
{
"field": "배포상태",
"value": "배포중"
}
],
"사유": "얼굴수가 비어 있어 얼굴 조건은 걸지 않았고, 픽셀 스타일은 세로 조건 자체가 없어 가로만 견줬습니다. 가로 800은 최소 512를 넘습니다.",
"hedge": "얼굴수가 비어 있는 요청을 통과로 둔 것은 합성 기준 판단이라, 실제로는 얼굴 검출을 다시 돌리고 정하는 편이 맞을 수 있습니다."
},
{
"요청id": "REQ-8834",
"스타일코드": "ST-ANIME",
"판정": "사진 조건 미달",
"적용모델": null,
"적용버전": null,
"안내문구": "애니메 스타일은 가로세로 1024픽셀부터 변환됩니다. 더 큰 사진으로 다시 올려 주세요.",
"evidence": [
{
"field": "가로픽셀",
"value": 640
},
{
"field": "최소가로픽셀",
"value": 1024
},
{
"field": "세로픽셀",
"value": 480
},
{
"field": "최소세로픽셀",
"value": 1024
}
],
"사유": "사진이 가로 640, 세로 480이라 애니메 스타일이 요구하는 1024픽셀에 둘 다 못 미칩니다.",
"hedge": null
},
{
"요청id": "REQ-8840",
"스타일코드": "ST-GHIBLI",
"판정": "사진 조건 미달",
"적용모델": null,
"적용버전": null,
"안내문구": "지브리 스타일은 가로세로 1280픽셀부터 변환됩니다. 원본 사진으로 다시 올려 주세요.",
"evidence": [
{
"field": "가로픽셀",
"value": 256
},
{
"field": "최소가로픽셀",
"value": 1280
},
{
"field": "세로픽셀",
"value": 256
},
{
"field": "최소세로픽셀",
"value": 1280
}
],
"사유": "앱이 받는 최소값인 256픽셀로 올라온 사진이라 지브리 스타일의 1280픽셀 조건과 가장 크게 벌어집니다.",
"hedge": null
},
{
"요청id": "REQ-8850",
"스타일코드": "ST-BEAUTY",
"판정": "미출시 국가",
"적용모델": null,
"적용버전": null,
"안내문구": "뷰티 스타일은 아직 한국에서만 쓸 수 있습니다. 다른 스타일을 골라 주세요.",
"evidence": [
{
"field": "접수국가",
"value": "jp"
},
{
"field": "출시국가",
"value": [
"KR"
]
},
{
"field": "가로픽셀",
"value": 1200
},
{
"field": "최소가로픽셀",
"value": 720
}
],
"사유": "접수국가를 대문자로 바꾼 JP 가 뷰티 스타일의 출시 국가 KR 에 들어 있지 않습니다. 사진 크기는 조건을 넘겼습니다.",
"hedge": null
},
{
"요청id": "REQ-8862",
"스타일코드": "ST-BEAUTY",
"판정": "직전 버전으로 변환",
"적용모델": "MDL-BEAUTY-4",
"적용버전": "v4.0",
"안내문구": null,
"evidence": [
{
"field": "배포상태",
"value": "롤백"
},
{
"field": "현재버전",
"value": "v4.1"
},
{
"field": "직전배포버전",
"value": "v4.0"
},
{
"field": "접수국가",
"value": "KR"
}
],
"사유": "뷰티 모델이 롤백 상태라 v4.1 로는 보내지 못하고 직전에 배포됐던 v4.0 으로 보냅니다. 사진 조건과 출시 국가는 모두 통과했습니다.",
"hedge": null
},
{
"요청id": "REQ-8880",
"스타일코드": "ST-NEON",
"판정": "스타일 짝 없음",
"적용모델": null,
"적용버전": null,
"안내문구": "네온 스타일이 준비 중입니다. 잠시 뒤 다시 시도해 주세요.",
"evidence": [
{
"field": "스타일코드",
"value": "ST-NEON"
},
{
"field": "필요모델",
"agg": "count",
"value": 2
},
{
"field": "가로픽셀",
"value": 1200
}
],
"사유": "네온 스타일코드에 필요모델이 MDL-NEON-1 과 MDL-NEON-2 둘로 적혀 있어 어느 모델로 보낼지 정하지 못합니다. 카탈로그를 한 줄로 정리해야 풀립니다.",
"hedge": null
}
][자동 검증 · 1주차] 1. 판정 값이 다섯 enum 안에 있는지 확인합니다. 2. 요청id 와 스타일코드, 판정, 적용모델, 적용버전, evidence, 사유가 모두 있는지 확인합니다. 3. 가로픽셀과 세로픽셀이 256 이상이고 얼굴수가 0 이상이거나 비어 있는지 확인합니다. 4. 변환요청.스타일코드를 스타일카탈로그.스타일코드에서 고른 행이 정확히 한 줄인지 다시 계산합니다. 0줄이거나 필요모델이 서로 다른 값으로 둘 이상이면 판정이 스타일 짝 없음이고 적용모델이 null 인지 확인합니다. 조건이 성립하는 사례는 REQ-8880 이고 성립하지 않는 사례는 REQ-8821 입니다. 5. 가로픽셀이 최소가로픽셀보다 작거나 세로픽셀이 최소세로픽셀보다 작거나 얼굴수가 허용얼굴수를 넘으면 판정이 사진 조건 미달인지 다시 계산합니다. 최소세로픽셀이 비어 있으면 세로는 견주지 않고, 얼굴수가 비어 있으면 얼굴은 견주지 않습니다. 조건이 성립하는 사례는 REQ-8834 이고 성립하지 않는 사례는 두 값이 모두 비어 있는 REQ-8845 입니다. 6. 접수국가를 대문자로 바꾼 값이 그 스타일의 출시국가 배열에 없으면 판정이 미출시 국가인지 다시 계산합니다. 조건이 성립하는 사례는 소문자로 들어온 REQ-8850 이고 성립하지 않는 사례는 REQ-8893 입니다. 7. 그 스타일의 필요모델을 모델배포에서 고른 행의 배포상태가 배포중이 아니면 적용버전이 직전배포버전과 같고 판정이 직전 버전으로 변환인지 다시 계산합니다. 직전배포버전이 비어 있으면 그 스타일은 접수를 막습니다. 조건이 성립하는 사례는 REQ-8862 이고 성립하지 않는 사례는 REQ-8821 입니다. 8. 판정이 겹칠 때는 스타일 짝 없음, 사진 조건 미달, 미출시 국가, 직전 버전으로 변환, 바로 변환 차례로 앞선 값을 씁니다. 9. evidence 의 field 가 변환요청과 스타일카탈로그, 모델배포 세 표의 컬럼에 실재하는지 확인합니다. 10. agg 가 없는 evidence 항목의 value 가 수록된 행의 그 컬럼 값과 같은지 확인합니다. 11. 모든 사유가 존댓말로 끝나는지 확인합니다. [수동 검증] 1. 얼굴수가 비어 있는 요청을 통과로 둘지 되돌릴지 운영 담당자와 정합니다. 2. 롤백된 모델의 직전 버전 결과가 이용자에게 나가도 되는 품질인지 스타일별로 확인합니다. 3. 안내문구가 접수국가의 말로 자연스럽게 읽히는지 언어별로 사람이 봅니다. [평가 러너 · 2주차] 1. 정답을 붙인 요청 60건으로 판정 다섯 갈래의 정밀도와 재현율을 냅니다. 2. 얼굴수가 비어 있는 요청과 들어 있는 요청을 나눠 사진 조건 판정이 얼마나 갈리는지 견줍니다.