에이티씨아이
경력근거: AI 기반 DevOps Execution Platform 스타트업입니다.
※ 실제 산출물이 아닌 AI 예측 시안입니다.
CollabOps 는 개발팀의 이슈·Git 저장소·변경요청·코드리뷰·CI/CD 파이프라인·환경별 배포와 운영 배포 승인을 한 워크스페이스에 묶는 DevOps 플랫폼으로, 소스 코드를 밖으로 내보낼 수 없는 공공기관·금융사·대기업 개발 조직을 1차 고객으로 잡아요. 제품은 에이티씨아이에서 스핀오프한 ㈜콜레봅스가 만들고, 에이티씨아이는 CollabOps 총판을 맡아요.
공고는 CollabOps 를 'AI 기반 DevOps Execution Platform 스타트업'으로 소개하고, 자격 요건에 'API·인증·권한·데이터 모델을 이해하고, 담당 기능에 필요한 백엔드 개발까지 업무 범위를 넓힐 수 있는 분'을 적었어요. CollabOps 는 2026년 9월부터 변경 하나를 기준으로 코드 버전·검증 근거·승인·배포 이력을 묶어, 그 변경을 운영에 내보내도 되는지 판단하게 하는 쪽을 제품 중심에 두었다고 밝혔어요. Git 변경요청은 승인이 끝난 뒤에도 커밋을 더 받을 수 있고 빌드·테스트 결과는 커밋마다 따로 나와서, 승인과 검증을 같은 커밋에 맞춰 보지 않으면 검토받지 않은 코드가 운영에 나갈 수 있어요.
공고는 Next.js(App Router) 기반 Web 애플리케이션과 React Native 기반 Mobile 앱 개발을 이 자리의 일로 꼽아요. 모바일 앱은 Web과 UI·상태 로직을 공유하게 만든다고 적었어요.
자격 요건에 API·인증·권한·데이터 모델을 이해하고 담당 기능에 필요한 백엔드 개발까지 업무 범위를 넓힐 수 있는 분을 적었어요. Next.js App Router와 Server Components를 이해하고 서버와 클라이언트의 역할을 나눌 수 있는 분도 함께 찾아요.
공고는 기능이 아닌 제품 완성도에 집착하고, 코드·UX·속도 모두에서 높은 기준을 유지한다고 밝혀요. 컴포넌트 간격·타이포그래피·인터랙션까지 신경 쓴 UI와 디자인 시스템 설계를 이 자리의 일로 꼽아요.
배포 승인자가 운영 배포 검토 회차를 시작할 때 여는 관리자 페이지예요. 그 회차에 올라온 변경요청마다 지금 올라와 있는 코드가 저장소가 정한 검증을 모두 통과했는지, 필요한 사람 수만큼 승인을 받았는지, 승인 뒤에 코드가 또 바뀌지 않았는지 알려 주고, 바로 운영에 내보낼 변경요청과 다시 검증·승인을 받아야 할 변경요청을 나눠 보여 줘요. 받은 데이터를 담을 DB 설계와 기술·구조는 지원자가 정해요.
CollabOps 를 쓰는 공공기관·금융사 개발 조직에서 운영 배포 승인을 맡은 배포 승인자(릴리스 담당 PM·개발 팀장)예요. 운영 배포 회차마다 올라온 변경요청을 바로 내보낼 것과 다시 검증·승인을 받을 것으로 갈라야 하는데, 변경요청에는 승인 뒤에도 커밋이 더 올라올 수 있어서 승인 표시만 보고 내보내면 검토받지 않은 코드가 함께 나가게 돼요.
저장소마다 운영 배포 전에 성공해야 하는 파이프라인 단계예요. 한 행이 저장소 하나의 필수 단계 하나이고, repo_id 와 stage 묶음이 키예요. repo_id 는 change_requests.repo_id 와 같은 저장소 코드이고, 변경요청이 있는 저장소는 모두 여기 한 줄 이상 있어요. 파이프라인은 여기 없는 단계(저장소마다 lint·integration_test·e2e_test 가운데 일부)도 돌리지만, 그 단계는 운영 배포 조건이 아니에요. 이 기간 동안 저장소 규칙은 바뀌지 않았어요. 큰 데이터는 저장소 48개의 필수 단계 143줄 전부이고, 시작용은 그 가운데 payment-core 저장소의 3줄이에요.
전체 3행 가운데 앞 3행이에요.
| repo_id | stage |
|---|---|
| payment-core | build |
| payment-core | unit_test |
| payment-core | security_scan |
3행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 143행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "저장소 하나의 운영 배포 필수 단계. 키는 (repo_id, stage) 묶음.",
"additionalProperties": false,
"required": [
"repo_id",
"stage"
],
"properties": {
"repo_id": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]+$",
"description": "저장소 코드. change_requests.repo_id 와 같은 코드예요."
},
"stage": {
"type": "string",
"enum": [
"build",
"lint",
"unit_test",
"integration_test",
"e2e_test",
"security_scan"
],
"description": "운영 배포 전에 성공해야 하는 파이프라인 단계. pipeline_runs.stage 와 같은 이름이에요."
}
}
}운영 배포 검토 회차에 올라온 변경요청이에요. 한 행이 변경요청 하나이고 change_id 가 키예요. repo_id 는 변경요청의 저장소 코드로 required_checks.repo_id 와 같은 코드예요. required_approvals 는 이 변경요청이 운영에 나가려면 승인해야 하는 사람 수로, 변경요청에 걸린 운영 배포 승인 규칙에 설정된 값이고, 같은 저장소의 변경요청은 이 기간 동안 모두 같은 값이에요. release_review_at 은 이 변경요청이 올라간 운영 배포 검토 회차의 시작 시각이고, 이 기능이 '지금'으로 삼는 시각이에요. 이 데이터에서는 회차가 저장소마다 정해진 요일·시각에 열리고, repo_id 와 release_review_at 이 같은 변경요청이 한 회차예요. 변경요청 하나는 한 회차에만 올라가요. 승인을 받은 뒤 커밋이 더 올라온 변경요청, 승인한 사람이 모자란 변경요청, 검토 시각에 검증이 아직 끝나지 않았거나 실패한 변경요청이 섞여 있어요. 큰 데이터는 2025년 10월 21일부터 2026년 10월 20일까지 저장소 48개의 회차에 올라온 변경요청 22,646건이고, 시작용은 그 마지막 날 payment-core 저장소 16:00 회차의 변경요청 9건을 같은 ID·같은 값으로 잘라 낸 것이에요.
전체 9행 가운데 앞 5행이에요.
| change_id | repo_id | title | required_approvals | release_review_at |
|---|---|---|---|---|
| CR-42603 | payment-core | 환불 사유 코드 추가 | 2 | 2026-10-20T16:00:00+09:00 |
| CR-42609 | payment-core | 부분 취소 금액 검증 보강 | 2 | 2026-10-20T16:00:00+09:00 |
| CR-42630 | payment-core | 환불 API 타임아웃 늘림 | 2 | 2026-10-20T16:00:00+09:00 |
| CR-42634 | payment-core | 결제 승인 로그 마스킹 범위 확대 | 2 | 2026-10-20T16:00:00+09:00 |
| CR-42637 | payment-core | 카드사 응답 코드 매핑 추가 | 2 | 2026-10-20T16:00:00+09:00 |
9행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 22,646행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "운영 배포 검토에 올라온 변경요청 하나. 키는 change_id.",
"additionalProperties": false,
"required": [
"change_id",
"repo_id",
"title",
"required_approvals",
"release_review_at"
],
"properties": {
"change_id": {
"type": "string",
"pattern": "^CR-[0-9]{5}$",
"description": "변경요청 번호. 이 표의 키예요."
},
"repo_id": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]+$",
"description": "변경요청의 저장소 코드. required_checks.repo_id 와 같은 코드예요."
},
"title": {
"type": "string",
"description": "변경요청 제목."
},
"required_approvals": {
"type": "integer",
"minimum": 1,
"description": "이 변경요청이 운영에 나가려면 승인해야 하는 사람 수. 변경요청에 걸린 운영 배포 승인 규칙에 설정된 값이에요."
},
"release_review_at": {
"type": "string",
"format": "date-time",
"description": "이 변경요청이 올라간 운영 배포 검토 회차의 시작 시각. CollabOps 서버 기준 한국 시간(+09:00) ISO 8601, 초 단위. 이 기능이 '지금'으로 삼는 시각이에요."
}
}
}변경요청 브랜치에 올라온 커밋이에요. 한 행이 커밋 하나이고 commit_sha 가 키예요. change_id 는 change_requests.change_id 를 가리키고, 한 커밋은 한 변경요청에만 속해요. 이 데이터에서는 커밋을 한 번에 하나씩 올려서 같은 변경요청 안에서 pushed_at 이 겹치지 않아요. pushed_at 은 CollabOps 서버가 커밋을 받은 시각이고, authored_at 은 개발자 PC 의 Git 이 커밋에 적은 작성 시각이라 서버 시계와 기준이 달라요. 다른 브랜치에서 가져온 커밋은 처음 쓴 시각이 그대로 남아서, 나중에 올라온 커밋의 authored_at 이 앞 커밋보다 이를 수 있어요. 검토 시각 뒤에 올라온 커밋도 있어요. 큰 데이터는 그 기간 변경요청의 커밋 39,769개 전부이고, 시작용은 시작용 변경요청 9건의 커밋 14개 전부예요.
전체 14행 가운데 앞 5행이에요.
| commit_sha | change_id | authored_at | pushed_at |
|---|---|---|---|
| 2df1f52b7b26754cab33b062f6942b2c04f9fcc3 | CR-42603 | 2026-10-19T15:20:12+09:00 | 2026-10-19T15:24:50+09:00 |
| 360313bac1f5649e9bc958afaac4f648094bf487 | CR-42609 | 2026-10-19T17:02:11+09:00 | 2026-10-19T17:06:45+09:00 |
| edb3e95e18eece17e6c5b11d30a222ffa1109128 | CR-42630 | 2026-10-20T09:12:40+09:00 | 2026-10-20T09:18:05+09:00 |
| d6f2a449a5b254aa3b4baa4a9964fc28aa5a4c1f | CR-42603 | 2026-10-20T09:51:30+09:00 | 2026-10-20T09:55:03+09:00 |
| 50721aa13ae17e1649eb4213a582003b3ab4fb1c | CR-42634 | 2026-10-20T10:05:32+09:00 | 2026-10-20T10:12:08+09:00 |
14행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 39,769행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "변경요청 브랜치에 올라온 커밋 하나. 키는 commit_sha.",
"additionalProperties": false,
"required": [
"commit_sha",
"change_id",
"authored_at",
"pushed_at"
],
"properties": {
"commit_sha": {
"type": "string",
"pattern": "^[0-9a-f]{40}$",
"description": "Git 커밋 해시(40자). 이 표의 키예요."
},
"change_id": {
"type": "string",
"pattern": "^CR-[0-9]{5}$",
"description": "이 커밋이 속한 변경요청. change_requests.change_id 를 가리켜요."
},
"authored_at": {
"type": "string",
"format": "date-time",
"description": "개발자 PC 의 Git 이 커밋에 적은 작성 시각. 서버 시계와 기준이 달라요. 한국 시간(+09:00) ISO 8601, 초 단위."
},
"pushed_at": {
"type": "string",
"format": "date-time",
"description": "CollabOps 서버가 이 커밋을 받은 시각. 한국 시간(+09:00) ISO 8601, 초 단위. 같은 변경요청 안에서 겹치지 않아요."
}
}
}커밋마다 돈 파이프라인 단계의 실행 기록이에요. 한 행이 단계 실행 한 번이고 run_id 가 키예요. commit_sha 는 cr_commits.commit_sha 를 가리켜요. 이 데이터에서는 커밋이 올라오면 build 가 먼저 돌고, build 가 성공하면 그 저장소의 나머지 단계가 함께 돌아요. 끝난 실행만 행이 되고, started_at 에 시작해 finished_at 에 끝났어요. status 는 success 와 failed 둘 중 하나예요. 실패한 단계를 다시 돌리면 같은 commit_sha·stage 로 새 행이 생겨요. 실패했다가 다시 돌려 성공한 단계, 필수가 아닌 단계의 실패, 검토 시각 전에 시작해 검토 시각 뒤에 끝난 실행이 들어 있어요. 시각은 모두 CollabOps 서버 시계예요. 큰 데이터는 그 기간 커밋의 실행 157,484건 전부이고, 시작용은 시작용 커밋 14개의 실행 57건 전부예요.
전체 57행 가운데 앞 5행이에요.
| run_id | commit_sha | stage | status | started_at | finished_at |
|---|---|---|---|---|---|
| RUN-1157109 | 2df1f52b7b26754cab33b062f6942b2c04f9fcc3 | build | success | 2026-10-19T15:25:26+09:00 | 2026-10-19T15:29:04+09:00 |
| RUN-1157110 | 2df1f52b7b26754cab33b062f6942b2c04f9fcc3 | unit_test | success | 2026-10-19T15:29:27+09:00 | 2026-10-19T15:37:30+09:00 |
| RUN-1157111 | 2df1f52b7b26754cab33b062f6942b2c04f9fcc3 | e2e_test | success | 2026-10-19T15:29:31+09:00 | 2026-10-19T15:51:58+09:00 |
| RUN-1157112 | 2df1f52b7b26754cab33b062f6942b2c04f9fcc3 | security_scan | success | 2026-10-19T15:29:37+09:00 | 2026-10-19T15:47:12+09:00 |
| RUN-1157151 | 360313bac1f5649e9bc958afaac4f648094bf487 | build | success | 2026-10-19T17:07:20+09:00 | 2026-10-19T17:11:02+09:00 |
57행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 157,484행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "파이프라인 단계 실행 한 번. 키는 run_id.",
"additionalProperties": false,
"required": [
"run_id",
"commit_sha",
"stage",
"status",
"started_at",
"finished_at"
],
"properties": {
"run_id": {
"type": "string",
"pattern": "^RUN-[0-9]{7}$",
"description": "실행 번호. 이 표의 키예요."
},
"commit_sha": {
"type": "string",
"pattern": "^[0-9a-f]{40}$",
"description": "이 실행이 검증한 커밋. cr_commits.commit_sha 를 가리켜요."
},
"stage": {
"type": "string",
"enum": [
"build",
"lint",
"unit_test",
"integration_test",
"e2e_test",
"security_scan"
],
"description": "파이프라인 단계 이름."
},
"status": {
"type": "string",
"enum": [
"success",
"failed"
],
"description": "success 는 성공으로 끝난 실행, failed 는 실패로 끝난 실행이에요."
},
"started_at": {
"type": "string",
"format": "date-time",
"description": "실행을 시작한 시각. CollabOps 서버 기준 한국 시간(+09:00) ISO 8601, 초 단위."
},
"finished_at": {
"type": "string",
"format": "date-time",
"description": "실행이 끝난 시각. CollabOps 서버 기준 한국 시간(+09:00) ISO 8601, 초 단위."
}
}
}변경요청에 남은 운영 배포 승인이에요. 한 행이 승인 한 번이고 approval_id 가 키예요. change_id 는 change_requests.change_id 를 가리키고, approver_id 는 승인한 사람의 사용자 코드예요. approved_at 은 CollabOps 서버가 승인을 기록한 시각이에요. 이 데이터에서는 승인이 취소되지 않아요. 앞 커밋에 승인하고 커밋이 더 올라온 뒤 다시 승인한 사람, 마지막 커밋보다 먼저 남은 승인, 검토 시각 뒤에 들어온 승인이 있어요. 큰 데이터는 그 기간 변경요청의 승인 48,333건 전부이고, 시작용은 시작용 변경요청 9건의 승인 18건 전부예요.
전체 18행 가운데 앞 5행이에요.
| approval_id | change_id | approver_id | approved_at |
|---|---|---|---|
| AP-148178 | CR-42603 | U-0503 | 2026-10-19T16:42:19+09:00 |
| AP-148261 | CR-42609 | U-0503 | 2026-10-20T09:40:18+09:00 |
| AP-148271 | CR-42609 | U-0412 | 2026-10-20T10:02:55+09:00 |
| AP-148273 | CR-42630 | U-0412 | 2026-10-20T10:05:12+09:00 |
| AP-148281 | CR-42630 | U-0503 | 2026-10-20T10:31:40+09:00 |
18행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 48,333행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "운영 배포 승인 한 번. 키는 approval_id.",
"additionalProperties": false,
"required": [
"approval_id",
"change_id",
"approver_id",
"approved_at"
],
"properties": {
"approval_id": {
"type": "string",
"pattern": "^AP-[0-9]{6}$",
"description": "승인 번호. 이 표의 키예요."
},
"change_id": {
"type": "string",
"pattern": "^CR-[0-9]{5}$",
"description": "승인한 변경요청. change_requests.change_id 를 가리켜요."
},
"approver_id": {
"type": "string",
"pattern": "^U-[0-9]{4}$",
"description": "승인한 사람의 사용자 코드."
},
"approved_at": {
"type": "string",
"format": "date-time",
"description": "CollabOps 서버가 승인을 기록한 시각. 한국 시간(+09:00) ISO 8601, 초 단위."
}
}
}근거: AI 기반 DevOps Execution Platform 스타트업입니다.