

요구사항 정의서 참고
품질 보증
코드 리뷰, 자동화 테스트(E2E)
배포 전략
스테이징 환경에서 충분한 테스트 후 프로덕션 환경에 배포
유지보수 계획
버그 수정 및 기능 개선을 위한 정기 업데이트
사용자 매뉴얼
시스템 사용법을 상세히 설명하는 매뉴얼 작성
개발자 문서
시스템 아키텍처, API 명세서, 코드 설명서 작성
용어 정의
주요 용어와 약어 정의
200, { [ {}, {} ] }
vs
200, { "result": [ {}, {} ] }/api/v1/projects/{id}id (path, 필수, int64) - 조회할 프로젝트의 고유 IDProjectDetailResponse{
"id": 1,
"name": "Sample Project",
"active": true,
"data": "{\\"key\\": \\"value\\"}", // 미정
"version": 2,
"lastAccessedAt": "2025-03-19T10:00:00Z",
"createdAt": "2025-01-01T09:00:00Z",
"updatedAt": "2025-03-18T15:30:00Z"
}
id (path, 필수, int64) - 업데이트할 프로젝트의 고유 IDProjectUpdateRequest{
"name": "Updated Project",
"data": "{\\"newKey\\": \\"newValue\\"}"
}
ProjectDetailResponse{
"id": 1,
"name": "Updated Project",
"version": 3,
"createdAt": "2025-01-01T09:00:00Z",
"updatedAt": "2025-03-19T12:00:00Z"
{
"message": "meeor message",
"exceptionCode": "error code"
}id (path, 필수, int64) - 삭제할 프로젝트의 고유 ID/api/v1/templates/suggestTemplateSuggestRequest{
"article": "This is a sample article about technology."
}
TemplateSuggestResponse{
"items": [
{
"id": 101,
"priority": 1,
"data": {
"name": "Tech Template",
"category": "Social",
"size": {
"width": 1920,
"height": 1080
},
"background": {
"id": 10,
"name": "Tech BG",
"priority": 1,
"type": "Image",
"fileUrl": "<http://example.com/tech-bg.jpg>",
"size": {
"width": 1920,
"height": 1080
},
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
},
"avatar": {
"id": 20,
"name": "Tech Avatar",
"priority": 2,
"fileUrl": "<http://example.com/tech-avatar.png>",
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
},
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
],
"_info": {
"category": {
"id": 1,
"name": "Social"
}
}
}
/api/v1/tasks/{taskId}/retrytaskId (path, 필수, int64) - 재시도할 작업의 고유 IDTaskResponse{
"id": 50,
"projectId": 1,
"jobId": "job-12345",
"type": "VIDEO",
"status": "PENDING",
"output": {},
"retryCount": 2,
"createdAt": "2025-03-18T10:00:00Z",
"updatedAt": "2025-03-19T12:00:00Z"
}
/api/v1/projectsListResponseProjectResponse{
"data": [
{
"id": 1,
"name": "Project A",
"active": true,
"version": 1,
"lastAccessedAt": "2025-03-19T10:00:00Z",
"createdAt": "2025-01-01T09:00:00Z",
"updatedAt": "2025-03-18T15:00:00Z"
},
{
"id": 2,
"name": "Project B",
"active": false,
"version": 2,
"lastAccessedAt": "2025-03-15T14:00:00Z",
"createdAt": "2025-02-01T09:00:00Z",
"updatedAt": "2025-03-16T10:00:00Z"
}
]
}
ProjectDetailResponse{
"id": 3,
"name": "New Project",
"active": true,
"data": "{\\"key\\": \\"value\\"}",
"version": 1,
"lastAccessedAt": "2025-03-19T12:00:00Z",
"createdAt": "2025-03-19T12:00:00Z",
"updatedAt": "2025-03-19T12:00:00Z"
}
/api/v1/auth/refreshLoginResponse{
"accessToken": "new-access-token-123",
"refreshToken": "new-refresh-token-456"
}
/api/v1/auth/logout/api/v1/auth/loginLoginRequest{
"username": "user@example.com",
"password": "securepassword123"
}
LoginResponse{
"accessToken": "access-token-789",
"refreshToken": "refresh-token-101"
}
/api/v1/account/registerRegisterRequest{
"email": "newuser@example.com",
"code": "ABC123",
"password": "newpassword456",
"name": "John Doe",
"nickname": "johndoe",
"phone": "123-456-7890"
}
RegisterResponse{
"memberId": 1001
}
/api/v1/account/register/verify-emailVerifyEmailRequest{
"email": "newuser@example.com",
"code": "ABC123"
}
/api/v1/account/register/check-emailCheckEmailRequest{
"email": "newuser@example.com"
}
/api/v1/templatescategoryId (query, 선택, int32) - 필터링할 카테고리 IDListResponseTemplateResponse{
"data": [
{
"id": 101,
"priority": 1,
"data": {
"name": "Social Media Template",
"category": "Social",
"size": {
"width": 1080,
"height": 1080
},
"background": {
"id": 10,
"name": "Social BG",
"priority": 1,
"type": "Image",
"fileUrl": "<http://example.com/social-bg.jpg>",
"size": {
"width": 1080,
"height": 1080
},
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
},
"avatar": {
"id": 20,
"name": "Social Avatar",
"priority": 2,
"fileUrl": "<http://example.com/social-avatar.png>",
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
},
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
]
}
/api/v1/templates/{id}id (path, 필수, int64) - 조회할 템플릿의 고유 IDTemplateResponse{
"id": 101,
"priority": 1,
"data": {
"name": "Social Media Template",
"category": "Social",
"size": {
"width": 1080,
"height": 1080
},
"background": {
"id": 10,
"name": "Social BG",
"priority": 1,
"type": "Image",
"fileUrl": "<http://example.com/social-bg.jpg>",
"size": {
"width": 1080,
"height": 1080
},
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
},
"avatar": {
"id": 20,
"name": "Social Avatar",
"priority": 2,
"fileUrl": "<http://example.com/social-avatar.png>",
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
},
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
/api/v1/templates/categoriesListResponseTemplateCategoryDto{
"data": [
{
"id": 1,
"name": "Social"
},
{
"id": 2,
"name": "Politic"
},
{
"id": 3,
"name": "Economy"
}
]
}
/api/v1/tasksListResponseTaskResponse{
"data": [
{
"id": 50,
"projectId": 1,
"jobId": "job-12345",
"type": "VIDEO",
"status": "SUCCESS",
"output": {},
"retryCount": 0,
"createdAt": "2025-03-18T10:00:00Z",
"updatedAt": "2025-03-18T12:00:00Z"
},
{
"id": 51,
"projectId": 2,
"jobId": "job-67890",
"type": "VIDEO",
"status": "FAILED",
"output": {},
"retryCount": 1,
"createdAt": "2025-03-18T14:00:00Z",
"updatedAt": "2025-03-19T10:00:00Z"
}
]
}
/api/v1/tasks/{taskId}taskId (path, 필수, int64) - 조회할 작업의 고유 IDTaskResponse{
"id": 50,
"projectId": 1,
"jobId": "job-12345",
"type": "VIDEO",
"status": "SUCCESS",
"output": {},
"retryCount": 0,
"createdAt": "2025-03-18T10:00:00Z",
"updatedAt": "2025-03-18T12:00:00Z"
}
/api/v1/members/myMyProfileResponse{
"memberId": 1001,
"email": "user@example.com"
}
위 내용은 각 엔드포인트에 대한 설명과 응답의 JSON 포맷 예시를 포함합니다. 요청 본문이 필요한 경우에는 그에 맞는 예시도 추가했습니다. 추가적인 수정이나 더 구체적인 예시가 필요하면 말씀해주세요!