웹 개발사와 고객사 간의 프로젝트 관리 및 커뮤니케이션을 위한 웹 기반 협업 플랫폼
Work Hub는 웹 개발 프로젝트의 전체 생명주기를 관리하고, 개발사와 고객사 간의 원활한 소통을 지원하는 프로젝트 관리 시스템입니다. 프로젝트 단계별 진행 상황을 체크리스트 기반으로 추적하고, 실시간 알림을 통해 모든 이해관계자가 프로젝트 현황을 파악할 수 있습니다.
- 단계별 프로젝트 관리: 요구사항 정의 → 화면설계 → 디자인 → 퍼블리싱 → 개발 → QA
- 체크리스트 기반 진행도 추적: 각 단계별 상세 체크리스트로 진행 상황 관리
- 프로젝트 상태 관리: 진행 중, 완료, 보류 등 상태별 프로젝트 분류
- 프로젝트 게시판: 프로젝트별 공지사항 및 소통 공간
- CS 게시판: 고객 지원 및 문의 관리
- 댓글 시스템: 게시글 및 체크리스트 항목별 의견 교환
- 실시간 알림: SSE 기반 실시간 알림 시스템
- 역할 기반 접근 제어: 관리자, 개발자, 고객사 역할별 권한 관리
- 프로젝트별 멤버 관리: 개발 팀원 및 고객사 담당자 지정
- 통합 히스토리: 모든 엔티티의 생성, 수정, 삭제 이력 자동 기록
- 감사 로그: IP 주소, User Agent 등 메타데이터 포함
- Java 21: 최신 LTS 버전
- Spring Boot 3.5.7: 프레임워크
- Spring Security: 세션 기반 인증/인가
- Spring Data JPA: ORM
- QueryDSL: 타입 안전한 복잡한 쿼리 작성
- PostgreSQL 16: 메인 데이터베이스
- JSONB를 활용한 히스토리 데이터 저장
- View를 활용한 통합 히스토리 조회
- Docker & Docker Compose: 컨테이너 기반 배포
- AWS S3: 파일 저장소
- GitHub Actions: CI/CD 파이프라인
- Prometheus & Grafana: 모니터링 및 메트릭 시각화
- Swagger/OpenAPI: API 문서 자동화
- Java 21 이상
- Docker & Docker Compose
- PostgreSQL 16 (로컬 개발 시 Docker 사용 권장)
- 저장소 클론
git clone https://github.com/your-org/workhub.git
cd workhub- 환경 변수 설정
cp .env.example .env
# .env 파일 편집하여 필요한 값 설정- Docker Compose로 실행
# 애플리케이션 실행 (PostgreSQL 포함)
DB_PASSWORD=your_password docker compose --profile app up -d
# 모니터링 스택 실행 (선택사항)
docker compose --profile monitor up -d# 빌드
./gradlew build
# 테스트 실행
./gradlew test
# 특정 테스트 클래스 실행
./gradlew test --tests "com.workhub.project.service.ProjectServiceTest"
# 애플리케이션 실행 (dev 프로필)
./gradlew bootRun- 애플리케이션: http://localhost:8080
- Swagger UI: http://localhost:8080/swagger-ui.html
- Actuator Health: http://localhost:8080/actuator/health
- Prometheus: http://localhost:9090 (모니터링 스택 실행 시)
- Grafana: http://localhost:3000 (모니터링 스택 실행 시)
- 기본 계정: admin/admin
src/main/java/com/workhub/
├── WorkhubApplication.java # 애플리케이션 진입점
├── global/ # 전역 설정 및 공통 컴포넌트
│ ├── config/ # Spring 설정 (Security, QueryDSL, S3, Swagger)
│ ├── error/ # 예외 처리 및 ErrorCode
│ ├── response/ # 공통 API 응답 포맷
│ ├── security/ # 인증/인가 핸들러
│ ├── entity/ # 공통 엔티티 (BaseTimeEntity, BaseHistoryEntity)
│ ├── notification/ # 알림 공통 헬퍼
│ └── util/ # 유틸리티 클래스
│
├── userTable/ # 사용자 및 회사 관리
├── project/ # 프로젝트 관리
├── projectNode/ # 프로젝트 단계 관리
├── checklist/ # 체크리스트 관리
├── post/ # 게시판 (공지사항, 일반 게시글)
├── cs/ # 고객 지원 (CS 게시판, Q&A)
├── projectNotification/ # 실시간 알림 (SSE)
├── history/ # 통합 변경 이력
├── dashboard/ # 대시보드 및 통계
└── file/ # 파일 업로드/다운로드 (S3)
각 도메인은 다음과 같은 레이어로 구성됩니다:
controller/- REST API 엔드포인트service/- 비즈니스 로직 (CRUD별 분리)repository/- JPA Repository 및 QueryDSL 구현체entity/- JPA 엔티티dto/request/,dto/response/- Java Record 기반 DTO
모든 API는 표준화된 응답 포맷을 사용합니다:
{
"success": true,
"code": "SUCCESS",
"message": "요청이 성공했습니다.",
"data": {
"id": 1,
"name": "프로젝트명"
}
}{
"success": false,
"code": "PJ-001",
"message": "프로젝트를 찾을 수 없습니다.",
"data": null
}# 전체 테스트 실행
./gradlew test
# 빌드 캐시를 사용한 테스트 (CI 환경)
./gradlew clean test --build-cache
# 특정 패턴의 테스트만 실행
./gradlew test --tests "*ProjectService*"GitHub Actions를 통해 자동화된 테스트가 실행됩니다:
- 트리거:
main,dev브랜치로의 Pull Request - 환경: PostgreSQL 16
- 실행:
./gradlew clean test --build-cache
각 도메인이 독립적인 레이어(Controller-Service-Repository-Entity)를 가지며, 도메인 간 의존성을 최소화합니다.
복잡한 동적 쿼리는 QueryDSL을 사용하여 타입 안전성과 가독성을 확보합니다.
- 모든 엔티티의 변경 이력을 자동으로 추적
- PostgreSQL View를 통해 통합 조회
- JSONB로 변경 전 데이터 스냅샷 저장
[사용자 액션] → [Service] → DB 저장
↓
[NotificationEmitterService]
↓
[SSE 연결된 클라이언트]
- 단일 인스턴스 환경에서
ConcurrentHashMap기반 메모리 관리 - 멀티 인스턴스 확장 시 Redis Pub/Sub 추가 가능
JWT 대신 Spring Security의 세션 기반 인증을 사용하여 보안성을 강화합니다.
- Health Check:
/actuator/health - Metrics:
/actuator/metrics - Prometheus:
/actuator/prometheus
# 모니터링 스택 시작
docker compose --profile monitor up -d- Prometheus: http://localhost:9090
- Grafana: http://localhost:3000
- API 문서: Swagger UI
이 프로젝트는 비공개 프로젝트입니다.
Work Hub 개발팀