에이치이엠파마
경력근거: 자사 글로벌 앱(React Native) 기반 개발 · 유지보수 및 프로덕션 운영
※ 실제 산출물이 아닌 AI 예측 시안입니다.
에이치이엠파마는 암웨이 뉴트리라이트 브랜드로 팔리는 장내 미생물 검사 my LAB PLUS·my LAB 의 분변 검체를 자사 연구소에서 분석해, 미생물 다양성·유익균과 유해균·맞춤 프로바이오틱스 같은 결과를 알려 주는 마이크로바이옴 헬스케어 회사예요. 일본에서는 2026년 5월 my LAB PLUS 를 정식 출시했고, 일본 이용자는 회사가 내놓은 my LAB PLUS Daily 앱에서 분석 결과와 맞춤 프로바이오틱스를 확인해요.
공고는 이 자리의 주요 업무로 '자사 글로벌 앱(React Native) 기반 개발 · 유지보수 및 프로덕션 운영'과 '자사 관리자 시스템 개발 및 유지보수'를 꼽아요. 장내 미생물 검사는 이용자가 보낸 분변 검체를 연구소가 분석해야 결과가 나오고, 일본 이용자는 그 결과를 my LAB PLUS Daily 앱에서 확인해요. 검체 배송, 연구소 분석, 앱 공개는 서로 다른 곳에서 진행되고 기록도 따로 남아서, 문의를 받은 사람이 세 기록을 맞춰 봐야 어느 단계에서 늦어졌는지 알 수 있어요.
공고는 주요 업무 첫째로 React Native 기반 자사 글로벌 앱의 개발·유지보수와 프로덕션 운영을 꼽아요. App Store Connect·Google Play Console 같은 앱 배포도 이 자리가 맡아요.
공고는 자사 관리자 시스템의 개발과 유지보수를 주요 업무로 적고, React·Next.js·JSP 처럼 시스템마다 다른 기술을 다뤄 본 경험을 함께 적었어요.
자격요건에 앱·기기·서버에 걸친 문제를 계층별로 나눠 원인을 특정하고 해결할 수 있는 사람을 적었어요. 프론트와 서버 사이의 데이터 흐름을 이해하고 설명할 수 있어야 한다는 조건도 있어요.
앱 운영 담당자가 이용자의 결과 문의를 받았을 때 여는 관리자 페이지예요. 문의마다 그 키트의 검체가 연구소에 도착했는지, 연구소 분석이 끝났는지, 결과가 앱에 올라갔는지 보여 주고, 예정보다 늦어진 키트는 배송·분석·앱 공개 가운데 어느 단계에서 늦어졌는지 알려 줘요. 받은 데이터를 담을 DB 설계와 기술·구조, 그리고 단계마다 늦어졌다고 볼 기간은 지원자가 정해요.
에이치이엠파마에서 일본 이용자가 검사 결과를 보는 my LAB PLUS Daily 앱과 관리자 시스템을 운영하는 앱 운영 담당자예요. 키트를 보낸 이용자가 결과가 언제 나오는지 물을 때 그 키트의 검체가 연구소에 도착했는지, 분석이 끝났는지, 결과가 앱에 올라갔는지 한 번에 알 수 없으면, 답하기 전에 연구소와 서버 쪽에 다시 물어야 해요.
이용자가 앱에서 검사 키트 번호를 등록한 기록이에요. 한 행이 키트 하나이고 kit_id 가 키예요. 이 데이터에서는 이용자가 분변 검체를 채취해 보내면서 키트를 등록하고, registered_at 은 그 등록을 받은 앱 서버의 시각이에요. user_id 는 등록한 이용자이고, 한 이용자가 시간을 두고 키트를 여러 개 등록하기도 해요. 앞서 보낸 키트의 결과가 이미 앱에 올라간 뒤 새 키트를 등록한 이용자가 들어 있어요. 이 데이터의 시각은 모두 앱 서버와 연구소 시스템이 같은 기준으로 맞춘 시계로 찍은 +09:00 ISO 8601(초 단위)이라 표끼리 바로 견줄 수 있고, 2026년 10월 21일 18:00 까지 일어난 일만 담겨 있어요. 큰 데이터는 2026년 5월 25일부터 10월 21일 18:00 까지 등록된 키트 35,996개이고, 시작용은 10월 21일 09:00~12:00 에 결과를 물은 이용자의 키트 전부 21개를 같은 ID·같은 값으로 잘라 낸 것이에요.
전체 21행 가운데 앞 5행이에요.
| kit_id | user_id | registered_at |
|---|---|---|
| KIT-JP-856702 | JU-904215 | 2026-06-19T22:41:06+09:00 |
| KIT-JP-858841 | JU-390842 | 2026-06-28T08:57:19+09:00 |
| KIT-JP-861529 | JU-461307 | 2026-07-08T21:12:45+09:00 |
| KIT-JP-879305 | JU-207754 | 2026-09-05T19:48:02+09:00 |
| KIT-JP-881544 | JU-660381 | 2026-09-21T18:12:40+09:00 |
21행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 35,996행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "이용자가 등록한 검사 키트 하나. 키는 kit_id.",
"additionalProperties": false,
"required": [
"kit_id",
"user_id",
"registered_at"
],
"properties": {
"kit_id": {
"type": "string",
"pattern": "^KIT-JP-[0-9]{6}$",
"description": "검사 키트 번호. 이 표의 키예요."
},
"user_id": {
"type": "string",
"pattern": "^JU-[0-9]{6}$",
"description": "키트를 등록한 이용자. 한 이용자가 키트를 여러 개 등록할 수 있어요."
},
"registered_at": {
"type": "string",
"format": "date-time",
"description": "이용자가 앱에서 키트를 등록한 시각. 앱 서버 시계, +09:00 ISO 8601, 초 단위."
}
}
}연구소가 검체를 받아 접수한 기록이에요. 키트 하나는 한 번만 접수되므로 한 행이 키트 하나이고 kit_id 가 키예요. kit_id 는 kit_registrations.kit_id 를 가리켜요. received_at 은 연구소 시스템이 접수를 찍은 시각이고, 이 데이터에서는 접수가 09:00~18:00 사이에 찍혀요. 아직 연구소에 도착하지 않은 키트는 행이 없어요. 평소보다 오래 걸려 도착한 검체, 등록하고 한참이 지나도록 도착하지 않은 검체, 문의가 들어온 날 오후에 도착한 검체가 들어 있어요. 큰 데이터는 접수 33,914건이고, 시작용은 시작용 키트 21개 가운데 접수된 18건 전부예요.
전체 18행 가운데 앞 5행이에요.
| kit_id | received_at |
|---|---|
| KIT-JP-856702 | 2026-06-26T13:18:52+09:00 |
| KIT-JP-858841 | 2026-07-04T11:29:40+09:00 |
| KIT-JP-861529 | 2026-07-15T10:03:11+09:00 |
| KIT-JP-879305 | 2026-09-21T10:37:44+09:00 |
| KIT-JP-881544 | 2026-09-28T11:05:19+09:00 |
18행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 33,914행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "연구소 검체 접수 한 번. 키는 kit_id.",
"additionalProperties": false,
"required": [
"kit_id",
"received_at"
],
"properties": {
"kit_id": {
"type": "string",
"pattern": "^KIT-JP-[0-9]{6}$",
"description": "연구소에 접수된 키트. kit_registrations.kit_id 를 가리키고 이 표의 키예요. 키트 하나는 한 번만 접수돼요."
},
"received_at": {
"type": "string",
"format": "date-time",
"description": "연구소가 검체를 접수한 시각. 연구소 시스템 시계, +09:00 ISO 8601, 초 단위."
}
}
}연구소 분석이 끝나 결과 리포트가 나온 기록이에요. 한 행이 리포트 하나이고 report_id 가 키예요. kit_id 는 분석한 키트로 kit_registrations.kit_id 를 가리키고, 키트 하나에 리포트는 하나예요. completed_at 은 연구소 시스템이 분석 완료를 찍은 시각이에요. 분석이 아직 끝나지 않은 키트는 행이 없어요. 접수하고 한참이 지나도록 분석이 끝나지 않은 키트와, 문의가 들어온 날 오후에 분석이 끝난 키트가 들어 있어요. 큰 데이터는 리포트 29,838건이고, 시작용은 시작용 키트의 리포트 12건 전부예요.
전체 12행 가운데 앞 5행이에요.
| report_id | kit_id | completed_at |
|---|---|---|
| RPT-304674 | KIT-JP-856702 | 2026-07-08T09:36:15+09:00 |
| RPT-306468 | KIT-JP-858841 | 2026-07-16T23:05:58+09:00 |
| RPT-308637 | KIT-JP-861529 | 2026-07-27T04:49:30+09:00 |
| RPT-328341 | KIT-JP-878046 | 2026-10-16T07:58:31+09:00 |
| RPT-328916 | KIT-JP-881977 | 2026-10-18T10:20:08+09:00 |
12행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 29,838행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "연구소 분석 결과 리포트 하나. 키는 report_id.",
"additionalProperties": false,
"required": [
"report_id",
"kit_id",
"completed_at"
],
"properties": {
"report_id": {
"type": "string",
"pattern": "^RPT-[0-9]{6}$",
"description": "분석이 끝나 나온 결과 리포트 번호. 이 표의 키예요."
},
"kit_id": {
"type": "string",
"pattern": "^KIT-JP-[0-9]{6}$",
"description": "분석한 키트. kit_registrations.kit_id 를 가리켜요. 키트 하나에 리포트는 하나예요."
},
"completed_at": {
"type": "string",
"format": "date-time",
"description": "연구소 분석이 끝나 리포트가 나온 시각. 연구소 시스템 시계, +09:00 ISO 8601, 초 단위."
}
}
}결과 리포트가 앱에 올라가 이용자가 볼 수 있게 된 기록이에요. 리포트 하나는 한 번만 올라가므로 한 행이 리포트 하나이고 report_id 가 키예요. report_id 는 analysis_runs.report_id 를 가리켜요. published_at 은 앱 서버가 공개를 찍은 시각이에요. 아직 앱에 올라가지 않은 리포트는 행이 없어요. 분석이 끝나고 며칠이 지나도록 올라가지 않은 리포트, 문의가 들어오기 몇 분 전이나 들어온 뒤에 올라간 리포트가 들어 있어요. 큰 데이터는 공개 29,584건이고, 시작용은 시작용 리포트 가운데 올라간 10건 전부예요.
전체 10행 가운데 앞 5행이에요.
| report_id | published_at |
|---|---|
| RPT-304674 | 2026-07-08T21:47:33+09:00 |
| RPT-306468 | 2026-07-17T08:12:24+09:00 |
| RPT-308637 | 2026-07-27T16:22:08+09:00 |
| RPT-329086 | 2026-10-19T14:03:27+09:00 |
| RPT-329642 | 2026-10-21T09:48:12+09:00 |
10행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 29,584행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "리포트의 앱 공개 한 번. 키는 report_id.",
"additionalProperties": false,
"required": [
"report_id",
"published_at"
],
"properties": {
"report_id": {
"type": "string",
"pattern": "^RPT-[0-9]{6}$",
"description": "앱에 올라간 리포트. analysis_runs.report_id 를 가리키고 이 표의 키예요. 리포트 하나는 한 번만 올라가요."
},
"published_at": {
"type": "string",
"format": "date-time",
"description": "리포트가 앱에 공개돼 이용자가 볼 수 있게 된 시각. 앱 서버 시계, +09:00 ISO 8601, 초 단위."
}
}
}이용자가 앱에서 키트를 골라 결과가 언제 나오는지 물은 기록이에요. 한 행이 문의 한 건이고 inquiry_id 가 키예요. kit_id 는 묻는 키트로 kit_registrations.kit_id 를 가리키고, 한 키트에 문의가 여러 번 들어오기도 해요. asked_at 은 앱 서버가 문의를 받은 시각이고, 이 기능이 '지금'으로 삼는 시각이에요. 같은 키트에 같은 날 오전 두 번 들어온 문의와, 앞서 보낸 키트의 결과가 이미 앱에 있는 이용자의 새 키트 문의가 들어 있어요. 큰 데이터는 10월 21일 18:00 까지 들어온 문의 5,495건 전부이고, 시작용은 10월 21일 09:00~12:00 에 들어온 문의 19건 전부예요.
전체 19행 가운데 앞 5행이에요.
| inquiry_id | kit_id | asked_at |
|---|---|---|
| INQ-105467 | KIT-JP-889752 | 2026-10-21T09:05:44+09:00 |
| INQ-105468 | KIT-JP-884120 | 2026-10-21T09:12:48+09:00 |
| INQ-105469 | KIT-JP-882150 | 2026-10-21T09:19:33+09:00 |
| INQ-105470 | KIT-JP-886931 | 2026-10-21T09:26:05+09:00 |
| INQ-105471 | KIT-JP-883310 | 2026-10-21T09:33:50+09:00 |
19행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 5,495행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "이용자 결과 문의 한 건. 키는 inquiry_id.",
"additionalProperties": false,
"required": [
"inquiry_id",
"kit_id",
"asked_at"
],
"properties": {
"inquiry_id": {
"type": "string",
"pattern": "^INQ-[0-9]{6}$",
"description": "결과 문의 번호. 이 표의 키예요."
},
"kit_id": {
"type": "string",
"pattern": "^KIT-JP-[0-9]{6}$",
"description": "이용자가 묻는 키트. kit_registrations.kit_id 를 가리켜요."
},
"asked_at": {
"type": "string",
"format": "date-time",
"description": "앱 서버가 문의를 받은 시각. +09:00 ISO 8601, 초 단위. 이 기능이 '지금'으로 삼는 시각이에요."
}
}
}