패스트파이브
경력근거: 영업·운영·재무 등 현업 부서의 요구사항을 이해하고, 이를 시스템으로 구현합니다.
※ 실제 산출물이 아닌 AI 예측 시안입니다.
패스트파이브는 기업에 사무 공간을 서비스로 파는 회사예요. 공유오피스 지점 60여 곳에서 1인부터 50인 이상까지 쓰는 전용 사무실과 함께 쓰는 라운지·미팅룸을 월 이용료로 빌려주고, 1인 사업자부터 대기업의 TF까지 입주해 있어요.
공고는 이 자리가 할 일로 '영업·운영·재무 등 현업 부서의 요구사항을 이해하고, 이를 시스템으로 구현합니다'를 꼽고, '도메인에 맞는 데이터 모델과 모듈 구조를 설계하고' 서비스가 커져도 흔들리지 않는 구조를 만드는 일을 맡겨요. 패스트파이브의 사무실은 1주부터 계약할 수 있어서 사무실마다 계약이 끝나는 날이 제각각이에요. 끝나는 날 바로 다음 계약이 이어지거나 몇 주 뒤에 새 계약이 잡히기도 해서, 오늘 비어 있는 사무실과 고객이 원하는 입주일부터 쭉 쓸 수 있는 사무실이 서로 달라요.
공고는 영업·운영·재무 등 현업 부서의 요구사항을 이해하고 시스템으로 구현하는 일을 이 자리에 맡겨요. 기획자·디자이너와 함께 제품 사양을 정의하고 기획과 UI/UX 개선 방향을 제안하는 일도 함께 적었어요.
공고는 도메인에 맞는 데이터 모델과 모듈 구조를 설계하고, 서비스가 커져도 흔들리지 않는 아키텍처를 만드는 일을 꼽아요. 자격 요건에도 도메인을 깊이 이해하고 스키마와 아키텍처를 설계해 본 경험을 적었어요.
공고는 Kotlin/Spring Boot 백엔드와 React/TypeScript 프론트엔드를 모두 다루며 서비스 설계부터 신규 기능 개발, 운영까지 맡는 자리라고 적었어요. 한 영역이 아니라 두 영역을 모두 담당하는 포지션이라고 밝혔어요.
영업팀 담당자가 입주 문의에 답하기 전에 여는 관리자 페이지예요. 문의마다 희망 지점의 사무실 가운데 인원과 예산에 맞고 원하는 입주일부터 이어서 쓸 수 있는 곳이 있는지, 없으면 며칠 안에 비는 곳이 있는지 알려 주고, 제안할 사무실을 들어갈 수 있는 날과 함께 보여 줘요. 받은 데이터를 담을 DB 설계와 기술·구조, 그리고 며칠 안에 비어야 곧 빈다고 볼지는 지원자가 정해요.
패스트파이브 영업팀 담당자예요. 입주 문의는 희망 지점 몇 곳과 인원·입주일·예산을 함께 들고 오고, 사무실은 계약이 끝나면 비기도 하고 바로 다음 계약이 이어지기도 해서, 문의마다 사무실 크기와 이용료, 계약 기간을 견줘 봐야 바로 들어갈 곳을 제안할지 곧 비는 곳을 제안할지 정할 수 있어요.
공유오피스 지점이에요. 한 행이 지점 하나이고 branch_id 가 키예요. region 은 지점이 속한 권역이고, 이 데이터에서 한 문의의 희망 지점은 모두 한 권역 안에 있어요. 같은 권역에 이름 앞부분이 같은 지점(성수1호점과 성수2호점)이 있어요. 큰 데이터는 지점 60곳 전부이고, 시작용은 그중 성수 권역의 지점 2곳이에요.
전체 2행 가운데 앞 2행이에요.
| branch_id | branch_name | region |
|---|---|---|
| BR-24 | 성수1호점 | 성수 |
| BR-25 | 성수2호점 | 성수 |
2행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 60행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "지점 하나. 키는 branch_id.",
"additionalProperties": false,
"required": [
"branch_id",
"branch_name",
"region"
],
"properties": {
"branch_id": {
"type": "string",
"pattern": "^BR-[0-9]{2}$",
"description": "지점 코드. 이 표의 키예요."
},
"branch_name": {
"type": "string",
"description": "지점 이름. 다른 표는 이 이름이 아니라 branch_id 로 지점을 가리켜요."
},
"region": {
"type": "string",
"description": "지점이 속한 권역 이름. 한 문의의 희망 지점은 모두 한 권역 안에 있어요."
}
}
}지점마다 빌려주는 전용 사무실이에요. 한 행이 사무실 하나이고 office_id 가 키예요. branch_id 는 branches.branch_id 를 가리키고, 한 사무실은 한 지점에만 속해요. seats 는 들어갈 수 있는 최대 인원이고, monthly_fee 는 계약 장부와 같은 2026년 10월 27일 아침에 걸려 있던 월 정가로 부가세를 뺀 원 단위 금액이에요. 1인실부터 50인 이상 사무실까지 있고, 인원이 같은 사무실도 지점과 층에 따라 정가가 달라요. 큰 데이터는 지점 60곳의 사무실 2,127개 전부이고, 시작용은 성수 권역 지점 2곳의 사무실 35개 전부예요.
전체 35행 가운데 앞 5행이에요.
| office_id | branch_id | room_name | seats | monthly_fee |
|---|---|---|---|---|
| OF-0875 | BR-24 | 2층 201호 | 5 | 2,500,000 |
| OF-0876 | BR-24 | 3층 301호 | 5 | 2,520,000 |
| OF-0877 | BR-24 | 4층 401호 | 39 | 17,860,000 |
| OF-0878 | BR-24 | 2층 202호 | 4 | 2,100,000 |
| OF-0879 | BR-24 | 3층 302호 | 4 | 2,120,000 |
35행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 2,127행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "사무실 하나. 키는 office_id.",
"additionalProperties": false,
"required": [
"office_id",
"branch_id",
"room_name",
"seats",
"monthly_fee"
],
"properties": {
"office_id": {
"type": "string",
"pattern": "^OF-[0-9]{4}$",
"description": "사무실 코드. 이 표의 키예요."
},
"branch_id": {
"type": "string",
"pattern": "^BR-[0-9]{2}$",
"description": "이 사무실이 있는 지점. branches.branch_id 를 가리켜요. 한 사무실은 한 지점에만 속해요."
},
"room_name": {
"type": "string",
"description": "층과 호수(예: 3층 304호). 한 지점 안에서 겹치지 않아요."
},
"seats": {
"type": "integer",
"minimum": 1,
"description": "이 사무실에 들어갈 수 있는 최대 인원(인실)."
},
"monthly_fee": {
"type": "integer",
"minimum": 1,
"description": "이 사무실의 월 정가(원, 정수, 부가세 별도). 계약 장부와 같은 2026년 10월 27일 아침에 걸려 있던 값이에요."
}
}
}사무실마다 맺은 이용 계약이에요. 한 행이 계약 하나이고 contract_id 가 키예요. office_id 는 offices.office_id 를 가리키고, 한 계약은 사무실 하나에만 걸려요. start_date 는 그 계약으로 쓰기 시작하는 날, end_date 는 마지막으로 쓰는 날이고 둘 다 그날을 포함하는 한국 날짜예요. 한 사무실의 계약 기간은 서로 겹치지 않고, 어느 계약에도 걸리지 않은 날은 그 사무실이 빈 날이에요. 이 장부는 2026년 10월 27일 아침에 뽑은 것이라 그때까지 맺은 계약이 모두 있고, 그날 뒤에 시작하는 계약(앞 계약이 끝난 다음 날 바로 이어지는 계약, 비어 있다가 몇 주 뒤 시작하는 계약)도 들어 있어요. 한 주짜리부터 2년짜리까지 기간이 다른 계약, 이미 끝난 계약, 고객이 원하는 입주일 당일에 끝나는 계약이 섞여 있어요. 큰 데이터는 지점이 문을 연 뒤 맺은 계약 13,106건 전부이고, 시작용은 성수 권역 사무실 35개의 계약 가운데 2026년 9월 1일 이후에 끝나는 계약 40건 전부예요.
전체 40행 가운데 앞 5행이에요.
| contract_id | office_id | start_date | end_date |
|---|---|---|---|
| CT-005494 | OF-0875 | 2026-06-09 | 2027-06-08 |
| CT-005501 | OF-0876 | 2026-06-20 | 2027-06-19 |
| CT-005511 | OF-0877 | 2026-07-01 | 2026-12-31 |
| CT-005512 | OF-0877 | 2027-01-14 | 2027-01-20 |
| CT-005519 | OF-0878 | 2026-06-26 | 2026-12-25 |
40행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 13,106행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "사무실 이용 계약 하나. 키는 contract_id.",
"additionalProperties": false,
"required": [
"contract_id",
"office_id",
"start_date",
"end_date"
],
"properties": {
"contract_id": {
"type": "string",
"pattern": "^CT-[0-9]{6}$",
"description": "계약 번호. 이 표의 키예요."
},
"office_id": {
"type": "string",
"pattern": "^OF-[0-9]{4}$",
"description": "이 계약이 걸린 사무실. offices.office_id 를 가리켜요."
},
"start_date": {
"type": "string",
"format": "date",
"description": "이 계약으로 사무실을 쓰기 시작하는 날(한국 날짜, YYYY-MM-DD). 그날부터 써요."
},
"end_date": {
"type": "string",
"format": "date",
"description": "이 계약으로 사무실을 마지막으로 쓰는 날(한국 날짜, YYYY-MM-DD). 그날까지 써요. start_date 와 같거나 늦어요."
}
}
}영업팀에 들어온 입주 문의예요. 한 행이 문의 한 건이고 inquiry_id 가 키예요. headcount 는 함께 들어올 인원, move_in_date 는 고객이 그날부터 쓰고 싶은 날(한국 날짜)이에요. monthly_budget 은 고객이 말한 월 예산으로, offices.monthly_fee 와 같이 부가세를 뺀 원 단위 금액이에요. received_at 은 문의가 영업팀 접수함에 들어온 시각(한국 시간)이에요. 희망 지점은 inquiry_branches 에 따로 있고, 문의한 회사의 계약은 아직 office_contracts 에 없어요. 희망 지점에는 인원만큼 큰 사무실이 없고 같은 권역의 다른 지점에만 있는 문의, 인원과 정원이 꼭 같은 사무실이나 예산과 정가가 꼭 같은 사무실이 걸린 문의, 입주일 당일이나 며칠 뒤에 계약이 끝나는 사무실이 걸린 문의, 곧 끝나는 계약 다음 날 바로 다음 계약이 이어진 사무실이 걸린 문의, 입주일엔 비어 있지만 몇 주 뒤 계약이 잡힌 사무실이 걸린 문의가 들어 있어요. 큰 데이터는 2026년 10월 20일부터 26일까지 전 지점에 들어온 문의 431건이고, 시작용은 그중 성수 권역에 들어온 문의 13건 전부예요.
전체 13행 가운데 앞 5행이에요.
| inquiry_id | company_name | headcount | move_in_date | monthly_budget | received_at |
|---|---|---|---|---|---|
| IQ-26046 | 로운리서치 | 3 | 2026-12-23 | 2,600,000 | 2026-10-20T18:13:19+09:00 |
| IQ-26081 | 벼리파트너스 | 7 | 2026-12-17 | 4,900,000 | 2026-10-21T13:12:36+09:00 |
| IQ-26100 | 모아애널리틱스 | 4 | 2026-12-20 | 2,520,000 | 2026-10-21T18:08:09+09:00 |
| IQ-26111 | 보람헬스케어 | 3 | 2026-12-28 | 2,600,000 | 2026-10-21T19:26:25+09:00 |
| IQ-26123 | 나래헬스케어 | 17 | 2026-12-21 | 7,800,000 | 2026-10-21T21:08:36+09:00 |
13행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 431행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "입주 문의 한 건. 키는 inquiry_id.",
"additionalProperties": false,
"required": [
"inquiry_id",
"company_name",
"headcount",
"move_in_date",
"monthly_budget",
"received_at"
],
"properties": {
"inquiry_id": {
"type": "string",
"pattern": "^IQ-[0-9]{5}$",
"description": "문의 번호. 이 표의 키예요."
},
"company_name": {
"type": "string",
"description": "문의한 회사 이름."
},
"headcount": {
"type": "integer",
"minimum": 1,
"description": "함께 들어올 인원."
},
"move_in_date": {
"type": "string",
"format": "date",
"description": "고객이 그날부터 쓰고 싶은 입주일(한국 날짜, YYYY-MM-DD)."
},
"monthly_budget": {
"type": "integer",
"minimum": 1,
"description": "고객이 말한 월 예산(원, 정수). offices.monthly_fee 와 같이 부가세를 뺀 금액이에요."
},
"received_at": {
"type": "string",
"format": "date-time",
"description": "문의가 영업팀 접수함에 들어온 시각. 한국 시간(+09:00) ISO 8601, 초 단위."
}
}
}문의마다 고객이 고른 희망 지점이에요. 한 행이 문의 하나와 지점 하나의 짝이고, inquiry_id 와 branch_id 묶음이 키예요. inquiry_id 는 inquiries.inquiry_id 를, branch_id 는 branches.branch_id 를 가리켜요. 한 문의의 희망 지점은 한 곳이거나 같은 권역 안의 두 곳이에요. 큰 데이터는 문의 431건의 희망 지점 575행 전부이고, 시작용은 시작용 문의 13건의 희망 지점 18행 전부예요.
전체 18행 가운데 앞 5행이에요.
| inquiry_id | branch_id |
|---|---|
| IQ-26046 | BR-25 |
| IQ-26081 | BR-24 |
| IQ-26081 | BR-25 |
| IQ-26100 | BR-24 |
| IQ-26111 | BR-24 |
18행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 575행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "문의 하나의 희망 지점 하나. 키는 (inquiry_id, branch_id) 묶음.",
"additionalProperties": false,
"required": [
"inquiry_id",
"branch_id"
],
"properties": {
"inquiry_id": {
"type": "string",
"pattern": "^IQ-[0-9]{5}$",
"description": "문의. inquiries.inquiry_id 를 가리켜요."
},
"branch_id": {
"type": "string",
"pattern": "^BR-[0-9]{2}$",
"description": "고객이 고른 희망 지점. branches.branch_id 를 가리켜요."
}
}
}