$ npm install
$ npm run devJuseyo는 자산과 재고를 효율적으로 관리하고, 요청 및 승인 프로세스를 자동화하는 재고 관리 플랫폼입니다.
단순한 자산 등록/조회 기능을 넘어, 부서별 자산 분류, 체계적인 요청 흐름, 실시간 재고 현황 파악까지 하나의 시스템 안에서 통합 관리할 수 있도록 설계되었습니다.
기존 재고 관리 방식은 Excel이나 수기 문서에 의존하고 있어 다음과 같은 문제가 있었습니다:
- 반복적인 요청 및 승인 누락
- 실시간 재고 현황 파악의 어려움
- 사용자와 관리자의 커뮤니케이션 부재
- 이력 및 상태 흐름 추적의 비효율
저희는 이러한 비효율을 해결하고자, 기업 조직 구조에 맞춘 재고 흐름 관리 시스템을 직접 설계하고 구현했습니다.
- 부서 기반 자산 관리 및 역할(Role)별 기능 구분
- 요청 → 승인 → 반납까지 명확한 프로세스 흐름 제공
- 실시간 재고 현황 및 상태 추적
- Excel 업로드 및 내보내기 기능
- 실시간 알림(SSE) 및 채팅 기능을 통한 커뮤니케이션 강화
![]() |
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|---|
| 황지윤 | 장지현 | 홍보람 | 근하람 | 이현석 |
| 팀장 | 개발팀장 | 팀원 | 팀원 | 팀원 |
| GitHub | GitHub | GitHub | GitHub | GitHub |
역할 기반 회원가입 및 JWT 인증 방식을 적용하여 보안성과 관리 편의성을 높였습니다.
-
역할(Role)에 따른 회원가입:
- 관리자(Admin), 일반 사용자(User)
- 최초 매니저(Initial Manager), 일반 매니저(Manager)
-
JWT 기반 인증 및 권한 관리
-
이메일 인증 / 휴대폰 인증 구현
-
Refresh Token을 Redis에 저장하여, RTR 방식(Refresh Token Rotation)으로 Access Token 재발급
비품 CRUD: 비품 추가, 수정, 삭제, 조회 기능
비품요청 관리: 사용자별 요청 생성, 수정, 승인, 반려
대여 처리: 대여 승인 시 출고 상태 변경 및 재고 차감
반납 처리: 반납 승인 시 입고 상태 변경 및 재고 복구
개별자산 관리: 비품의 인스턴스 단위 등록 및 상태 관리
비품추적: 요청 처리 시 이력 기록 및 상태 변경 추적
엑셀 내보내기: 데이터 다운로드
STOMP 기반 WebSocket으로 구현한 실시간 채팅 기능입니다.
1:1, 고객센터, 그룹 채팅을 지원하며, JWT 인증과 Redis, RDS를 활용한 구조입니다.
- STOMP + SockJS 기반 실시간 메시지 전송
- 1:1 / 고객센터 / 그룹 채팅방 생성 및 관리
- JWT 쿠키 인증 기반 세션 사용자 메시지 처리
- 메시지 RDS 저장, 채팅방 상태 Redis 관리
- 미확인 메시지 'NEW' 뱃지 표시
- 중복 채팅방 생성 방지
권한(Role)에 따라 다양한 이벤트 발생 시 알림을 전송하도록 옵저버 패턴과 스케줄러 기반 로직을 조합하여 구현했습니다.
- 역할 기반 알림 시스템: 권한(Role)에 따라 다양한 이벤트에 대해 알림을 전송
- 옵저버 패턴 적용: 비품 요청/반납, 회원 가입 등 실시간 이벤트 발생 시 즉시 알림 발송
- 스케줄러 기반 알림: 지정 반납일 초과, 요청 지연 등 주기적 검사에 따른 알림 발송
- SSE(Server-Sent Events) 기반 실시간 알림 전달
비품 검색 : 관리페이지 등록 비품 검색 기능 추천 검색어 : 관리페이지 등록 비품 추천 검색어 기능
| 황지윤 |
|
| 장지현 |
|
| 홍보람 |
|
| 이현석 |
|
| 근하람 |
|
| 황지윤 |
|
| 장지현 |
|
| 홍보람 |
|
| 이현석 |
|
| 근하람 |
|
| 분류 | 기술 스택 |
|---|---|
| Frontend | |
| Backend | |
| DevOps / Infra | |
| Collaboration | |
| Documentation/Test |
JUSEYO-main/
├── .github/
├── .idea/
├── backend/
│ ├── .gradle/
│ ├── build/
│ ├── gradle/
│ ├── out/
│ ├── recommendation-app/
│ ├── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── example/
│ │ └── backend/
│ │ ├── base/
│ │ ├── domain/
│ │ │ ├── analysis/
│ │ │ ├── category/
│ │ │ ├── chaseItem/
│ │ │ ├── chat/
│ │ │ ├── department/
│ │ │ ├── excel/
│ │ │ ├── inventory/
│ │ │ ├── item/
│ │ │ ├── itemInstance/
│ │ │ ├── mainDashboard/
│ │ │ ├── managementDashboard/
│ │ │ ├── notification/
│ │ │ ├── recommendation/
│ │ │ ├── registerItem/
│ │ │ ├── role/
│ │ │ ├── search/
│ │ │ ├── supply/
│ │ │ └── user/
│ │ ├── enums/
│ │ ├── global/
│ │ └── BackendApplication.java
│ ├── resources/
│ └── test/
├── .gitattributes
├── .gitignore
├── build.gradle.kts
├── docker-compose.yml
├── Dockerfile
├── gradlew
├── gradlew.bat
└── settings.gradle.kts
src/
├── app/
│ ├── admin/
│ ├── chat/
│ │ ├── group/
│ │ ├── select/
│ │ ├── support/
│ │ └── user/
│ ├── components/
│ ├── dashboard/
│ ├── find/
│ ├── inbound/
│ ├── item/
│ │ ├── chase/
│ │ ├── detail/
│ │ ├── iteminstance/
│ │ ├── manage/
│ │ ├── purchaserequest/
│ │ ├── return/
│ │ ├── supplyreturn/
│ │ ├── supplyrequest/
│ │ └── user/
│ ├── itemDetail/
│ ├── itemview/
│ ├── login/
│ ├── notifications/
│ ├── outbound/
│ ├── privacy/
│ ├── search/
│ ├── settings/
│ ├── signup/
│ │ ├── info/
│ │ ├── initial/
│ │ ├── manager/
│ │ ├── managerinfo/
│ │ ├── member/
│ │ ├── select/
│ │ └── page.tsx
│ ├── support/
│ ├── terms/
│ ├── toast-example/
│ ├── user/
│ └── withdraw/
│ ├── ClientLayout.tsx
│ ├── globals.css
│ ├── layout.tsx
│ └── page.tsx
├── components/
├── services/
└── stores/
infra/
├── .gitignore
├── main.tf
├── secrets.tf.default
└── variables.tf
브랜치 전략은 Git Flow를 기반으로 하며, 다음과 같은 브랜치를 사용합니다.
-
Main Branch
main- 배포 가능한 상태의 코드를 유지합니다.
- 모든 배포는 이 브랜치에서 이루어집니다.
-
프론트 단독 개발
front/style/이슈번호-브랜치이름- 프론트엔드(html, css 등) 단독 작업 시 사용합니다.
- 배포 가능한 상태의 코드를 유지해야 하며, 배포는 이 브랜치에서 직접 이루어집니다.
-
프론트 + 백엔드 기능 연결
front/[type]/이슈번호-브랜치이름- 프론트와 백엔드 기능이 함께 연결되는 작업 시 사용합니다.
- 팀원 각자의 기능 개발용 브랜치입니다.
- 기능 개발, 테스트, UI/서버 연동 등이 이 브랜치에서 이루어집니다.
- 완료 시 main 혹은 다른 상위 브랜치에 병합합니다.
-
백엔드 기능 개발
back/[type]/이슈번호-브랜치이름- 백엔드 API, 서비스 로직, DB 처리 등 백엔드 중심 작업 시 사용합니다.
- 팀원 각자의 기능 개발용 브랜치입니다.
- 모든 기능 개발은 이 브랜치에서 진행되며, 완료 시 병합 요청합니다.
[ back or front / type ] [ 이슈 번호 ] : 커밋 내용
- 예시
- [front / feat] 139 : 로그인 페이지 UI 구현
[ back or front / type ] [ 이슈 번호 ] : PR 내용
- 예시
- [ back / feat ] 3 : 회원가입 API 구현
[ back or front / type ] : 이슈 내용
- 작업 목적 + 대상 + 내용을 포함해 작성합니다.
- 예시
- [ front / refact ] : 메인페이지 인기 게시글, 블로그 페이지 팔로우, 팔로우 페이지 블로그 연동
- [ front / feat ] : 댓글버튼 숨기기
- [ feat ] : 이메일 인증 구현
| 태그 | 의미 및 사용 시점 |
|---|---|
feat |
새로운 기능 추가 사용자에게 보이는 기능/화면 등 새로운 기능 개발 시 사용 |
fix |
버그 수정 의도와 다르게 동작하는 코드 수정, 예외/오류 처리 등 |
refact |
리팩토링 코드 구조 개선, 성능 향상 등 기능 변화 없이 내부 개선 시 |
docs |
문서 변경 README, 주석, API 문서, PR/Issue 템플릿 등 코드 외 문서 수정 시 |
style |
코드 스타일 변경 세미콜론, 들여쓰기, 줄 바꿈 등 로직 변경 없이 포맷 수정 시 |
test |
테스트 코드 추가/변경 JUnit, Mock 객체 등 테스트 관련 작업 시 |
chore |
환경설정/기타 작업 빌드/패키지 관련 작업, 테스트 외 설정 수정 등 |
ci |
CI/CD 설정 변경 GitHub Actions, Jenkins 등 자동화 관련 설정 수정 시 |
build |
빌드 시스템/의존성 변경 Gradle, npm, Docker 설정 등 수정 시 |
perf |
성능 개선 속도 향상, 메모리 최적화 등 성능 관련 작업 시 |





