백엔드 개발자 채용 과제 - 이슈 관리 시스템 REST API
Go 언어와 Gin 프레임워크를 사용하여 구현한 이슈 관리 REST API입니다. 이슈의 생성, 조회, 수정 기능을 제공하며, 담당자 할당과 상태 관리 기능을 포함합니다.
- 언어: Go 1.21+
- 프레임워크: Gin
- 데이터 저장: 메모리 (In-memory)
- 포트: 8080
- Go 1.21 이상 설치
- Git 설치
git clone https://github.com/kimauto/issue-api.git
cd issue-api
go mod tidy
go get github.com/gin-gonic/gingo run *.go서버가 성공적으로 시작되면 다음 메시지가 출력됩니다:
[GIN-debug] Listening and serving HTTP on :8080
- Base URL:
http://localhost:8080 - Content-Type:
application/json
시스템에 미리 등록된 사용자:
- ID: 1, 이름: "김개발"
- ID: 2, 이름: "이디자인"
- ID: 3, 이름: "박기획"
PENDING: 대기 중IN_PROGRESS: 진행 중COMPLETED: 완료CANCELLED: 취소
POST /issue요청 예시:
{
"title": "버그 수정 필요",
"description": "로그인 페이지에서 오류 발생",
"userId": 1
}응답 예시 (201 Created):
{
"id": 1,
"title": "버그 수정 필요",
"description": "로그인 페이지에서 오류 발생",
"status": "IN_PROGRESS",
"user": {
"id": 1,
"name": "김개발"
},
"createdAt": "2025-07-15T10:00:00Z",
"updatedAt": "2025-07-15T10:00:00Z"
}GET /issues
GET /issues?status=PENDING응답 예시 (200 OK):
{
"issues": [
{
"id": 1,
"title": "버그 수정 필요",
"description": "로그인 페이지에서 오류 발생",
"status": "PENDING",
"createdAt": "2025-07-15T10:00:00Z",
"updatedAt": "2025-07-15T10:05:00Z"
}
]
}GET /issue/{id}응답 예시 (200 OK):
{
"id": 1,
"title": "버그 수정 필요",
"description": "로그인 페이지에서 오류 발생",
"status": "PENDING",
"createdAt": "2025-07-15T10:00:00Z",
"updatedAt": "2025-07-15T10:05:00Z"
}PATCH /issue/{id}요청 예시:
{
"title": "로그인 버그 수정",
"status": "IN_PROGRESS",
"userId": 2
}응답 예시 (200 OK):
{
"id": 1,
"title": "로그인 버그 수정",
"description": "로그인 페이지에서 오류 발생",
"status": "IN_PROGRESS",
"user": {
"id": 2,
"name": "이디자인"
},
"createdAt": "2025-07-15T10:00:00Z",
"updatedAt": "2025-07-15T10:10:00Z"
}- 담당자가 있는 경우: 상태를
IN_PROGRESS로 설정 - 담당자가 없는 경우: 상태를
PENDING으로 설정 - 존재하지 않는 사용자를 담당자로 지정할 수 없음
COMPLETED또는CANCELLED상태의 이슈는 수정 불가- 담당자 없이
IN_PROGRESS또는COMPLETED상태로 변경 불가 PENDING상태에서 담당자 할당 시 자동으로IN_PROGRESS로 변경- 담당자 제거 시 상태를
PENDING으로 변경
# 이슈 생성
curl -X POST http://localhost:8080/issue \
-H "Content-Type: application/json" \
-d '{"title":"테스트 이슈","description":"테스트 설명","userId":1}'
# 이슈 목록 조회
curl -X GET http://localhost:8080/issues
# 상태별 필터링
curl -X GET "http://localhost:8080/issues?status=PENDING"
# 이슈 상세 조회
curl -X GET http://localhost:8080/issue/1
# 이슈 수정
curl -X PATCH http://localhost:8080/issue/1 \
-H "Content-Type: application/json" \
-d '{"status":"COMPLETED"}'- Postman 실행
- 새 요청 생성
- 위의 엔드포인트와 JSON 데이터를 사용하여 테스트
모든 에러는 다음 형식으로 응답됩니다:
{
"error": "에러 메시지",
"code": 400
}400 Bad Request: 잘못된 요청 데이터404 Not Found: 존재하지 않는 리소스500 Internal Server Error: 서버 내부 오류
.
├── main.go # 메인 서버 실행 파일
├── model.go # 데이터 모델 정의
├── handler.go # API 핸들러 함수들
├── data.go # 데이터 저장 및 관리
├── utils.go # 유틸리티 함수들
├── go.mod # Go 모듈 파일
├── go.sum # 의존성 체크섬
└── README.md # 프로젝트 설명서
이 프로젝트는 백엔드 개발자 채용 과제로 개발되었습니다.