Skip to content

Commit 6b65bea

Browse files
authored
Merge pull request #128 from TAVE-9RP/dev
전체 API 응답 등 스키마 최적화 (Dev -> Main)
2 parents 24e8381 + fdcc6a3 commit 6b65bea

File tree

8 files changed

+772
-91
lines changed

8 files changed

+772
-91
lines changed

README.md

Lines changed: 193 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,152 @@
1-
# NextErp 프로젝트 백엔드입니다.
1+
## 목차
22

3-
## 💡 1. 서비스 한 줄 요약
4-
NexERP는 중소·중견기업(SME)를 타켓으로, 전사적 자원 통합과 데이터 분석 기능을 제공하는 ERP 프로그램입니다.
3+
1. [**웹 서비스 소개**](#1)
4+
1. [**SW 아키텍처**](#2)
5+
1. [**기술 스택**](#3)
6+
1. [**주요 기능**](#4)
7+
1. [**폴더 구조**](#5)
8+
1. [**Git 협업 규칙**](#6)
9+
1. [**Git 브랜치 전략**](#7)
510

611
---
12+
<div id="1"></div>
713

8-
## 🔧 2. 기술 스택
9-
| 분류 | 스택 |
10-
|:-------------| :--- |
11-
| **Backend** | **Spring Boot** |
12-
| **Database** | **MySQL** |
13-
| **DevOps** | **GitHub Actions, AWS EC2** |
14+
# NexERP Backend
15+
16+
<img width="857" height="430" alt="image" src="https://github.com/user-attachments/assets/88185657-e38c-43ff-bfc0-d646d691bc0d" />
17+
18+
## 프로젝트 개요
19+
20+
<blockquote>
21+
NexERP는 NextGen(차세대)과 ERP(전사적 자원 관리)를 결합한 서비스로 단순한 관리를 넘어 내일의 성장을 주도하는 클라우드 솔루션을 제공합니다.
22+
</blockquote>
23+
24+
#### 👥 프로젝트 백엔드 팀원
25+
26+
| _이름_ | 이원진 | 윤민섭 | 곽채연 |
27+
|:----------:|:------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------------------------------:|
28+
| _역할(Role)_ | BE Lead | BE, INFRA | BE, FE |
29+
| | <a href="https://github.com/zldzldzz"><img src="https://avatars.githubusercontent.com/u/127071704?v=4" width="128" height="128"></a> | <a href="https://github.com/minsubyun1"><img src="https://avatars.githubusercontent.com/u/75060858?v=4" width="128" height="128"></a> | <a href="https://github.com/kwak513"><img src="https://avatars.githubusercontent.com/u/184176081?v=4" width="128" height="128"></a> |
1430

1531
---
1632

17-
## 📁 3. 폴더 구조
33+
<div id="2"></div>
1834

19-
```
20-
com.example.app
21-
├─ domain // 비즈니스 로직이 기능별로 위치 (유저, 주문 등)
22-
│ ├─ user
23-
│ │ ├─ controller
24-
│ │ ├─ service
25-
│ │ ├─ repository
26-
│ │ ├─ model
27-
│ │ │ ├─ entity
28-
│ │ │ ├─ request
29-
│ │ │ └─ response
30-
│ └─ order
31-
│ └─ ... (동일 패턴)
32-
└─ global // 프로젝트 전반에 걸쳐 사용되는 공통 인프라 및 정책
33-
├─ config
34-
├─ security
35-
├─ exception
36-
├─ handler
37-
├─ common
38-
├─ s3
39-
└─ notification
35+
## SW 아키텍처
36+
37+
<img width="600" height="700" alt="image" src="https://github.com/user-attachments/assets/a866cb4d-dc3f-4bd7-bdf2-380bc0d0315d" />
38+
39+
### 서비스 인프라 및 CI/CD (Main Infrastructure)
40+
41+
사용자가 서비스에 접속하고 최신 코드가 배포되는 핵심 경로
42+
43+
- 트래픽 제어: 클라이언트는 Route 53을 통해 접속하며 ALB가 SSL/TLS 인증서를 관리하고 트래픽을 가용 영역 내 EC2 인스턴스로 분산
44+
- 컴퓨팅: VPC 내부의 프라이빗 서브넷에 위치한 EC2가 실제 애플리케이션을 구동, RDS 활용
45+
- 배포 자동화: 코드 push 시, Github Actions가 도커 이미지를 빌드하여 ECR에 Push 후, EC2가 이를 Pull 하여 컨테이너 기반 서비스 실행
46+
47+
### 데이터 및 ETL 파이프라인 (Data Pipeline)
48+
49+
NexERP의 핵심인 예측 KPI를 생성하기 위한 배치 처리 프로세스입니다.
50+
51+
- 운영 환경의 부하를 최소화
52+
- RDS Read Replica 활용: 매일 새벽 진행되는 대규모 데이터 추출 작업이 실제 사용자의 서비스 이용(OLTP)에 영향을 주지 않도록, 운영 DB가 아닌 읽기
53+
복제본에서 데이터를 추출
54+
- 성능 격리: 이를 통해 분석 쿼리로 인한 운영 서버의 CPU/Memory 점유율 상승 차단
55+
56+
57+
- 서비리스 기반의 ETL 파이프라인
58+
- Step 1. Data Loading (02:00 KST): 복제본에서 추출된 로우 데이터(Raw Data)를 CSV 형태로 S3 Data Lake에 적재
59+
- Step 2. Analysis & Schema Conversion (03:00 KST): Event Bridge 스케줄러가 AWS Lambda를 트리거하여, S3의
60+
데이터를 분석하고 서비스 규격에 맞는 JSON 형태로 변환
61+
- Step 3. Persistent Snapshot (04:00 KST): 분석 결과를 다시 RDS 테이블에 저장
62+
63+
64+
- 스토리지 및 비용 최적화: S3에 저장된 원본 데이터는 LifeCycle Policy에 의해 120일 후 자동 삭제하여 스토리지 비용 관리 효율 확보
65+
66+
---
67+
<div id="3"></div>
68+
69+
## 기술 스택
70+
71+
### 개발 & 인프라
72+
73+
[![My Skills](https://skillicons.dev/icons?i=java,spring,aws,docker,githubactions,mysql&perline=3)](https://skillicons.dev)
74+
75+
### 협업 도구
76+
77+
[![My Skills](https://skillicons.dev/icons?i=notion,discord,figma,swagger&perline=3)](https://skillicons.dev)
78+
79+
---
80+
<div id="4"></div>
81+
82+
## 주요 기능
83+
84+
### 회원/인증
85+
86+
- JWT 기반 인증 및 권한 분기
87+
- 부서(관리/재고/물류) + 세부 Role(READ/WRITE/ALL) 관리
88+
- 정책 기반 권한 제어
4089

90+
### 관리/재고/물류 도메인 API
91+
92+
- 인사 관리 (권한, 가입 승인)
93+
- 프로젝트 전반(할당, 승인, 관리)
94+
- 입고 업무 전반(승인 요청, 입고 처리, 관리)
95+
- 출하 업무 전반(승인 요청, 출하 처리, 관리)
96+
- 재고 관리 (등록, 검색, 안전/목표 재고 설정)
97+
- 상태 기반 워크플로우
98+
99+
### KPI 대시보드
100+
101+
매일 자동 수집 -> 분석 -> S3 저장 -> DB 저장 과정 자동화
102+
103+
- 프로젝트 처리 완료율
104+
- 업무 장기 처리율
105+
- 안전재고 확보율
106+
- 재고 회전율
107+
- 출하 완료율
108+
- 출하 리드타임
109+
- 예측 KPI (재고 회전율, 출하 리드타임)
110+
111+
[스웨거 링크](https://nexerp.site/swagger-ui/index.html)
112+
113+
---
114+
<div id="5"></div>
115+
116+
### 📁 폴더 구조
117+
118+
```
119+
nexerp
120+
├─ domain
121+
│ ├─ admin
122+
│ ├─ analytics
123+
│ ├─ company
124+
│ ├─ inventory
125+
│ ├─ inventoryitem
126+
│ ├─ item
127+
│ ├─ kpi
128+
│ ├─ logistics
129+
│ ├─ logisticsItem
130+
│ ├─ member
131+
│ ├─ project
132+
│ └─ projectmember
133+
134+
└─ global
135+
├─ common
136+
├─ config
137+
├─ handler
138+
└─ security
139+
41140
```
141+
42142
---
43143

44-
## 🤝 4. Git 협업 규칙
45-
### ✅ 4-1. 이슈 타입 분류
144+
<div id="6"></div>
145+
146+
## 🤝 Git 협업 규칙
147+
148+
### 이슈 타입 분류
149+
46150
| 타입 | 설명 |
47151
|:---------------|:----------------------|
48152
| **[Feature]** | **새로운 기능 추가** |
@@ -51,78 +155,95 @@ com.example.app
51155
| **[Bug]** | **발견된 버그 수정 사항** |
52156
| **[Help]** | **도움 요청** |
53157

158+
### 커밋 메시지 컨벤션
159+
160+
#### 커밋 메시지 구조
54161

55-
### ✅ 4-2. 커밋 메시지 컨벤션
56-
#### 4-2-1. 커밋 메시지 구조
57162
```
58163
<타입>: <제목>
59164
60165
본문 내용 (선택)
61166
```
167+
62168
- 커밋 메시지는 한글로 작성합니다.
63169
- 커밋은 하나의 작업 단위로 구분됩니다.
64170

171+
#### 커밋 메시지 유형
172+
173+
| **유형** | **설명** |
174+
|:---------------------|:-------------------------------|
175+
| **feature** | **새로운 기능 추가** |
176+
| **refactor** | **코드 리팩토링 (기능 변화 없이 구조 개선)** |
177+
| **fix** | **일반적인 버그 수정** |
178+
| **docs** | **문서 수정 (README, 주석, 위키 등)** |
179+
| **test** | **테스트 코드 추가** |
180+
| **style** | **코드 포맷팅 (공백, 세미콜론 등 스타일 변경)** |
181+
| **chore** | **기타 관리 작업 (라이브러리 업데이트 등)** |
182+
| **comment** | **주석 추가 및 변경** |
183+
| **rename** | **파일/폴더명 수정 및 위치 이동** |
184+
| **remove** | **파일 삭제** |
185+
| **!BREAKING CHANGE** | **큰 API 변경** |
186+
| **fix** | **버그 수정** |
187+
| **!HOTFIX** | **긴급한 버그 수정** |
188+
189+
#### 커밋 메시지 예시
65190

66-
#### 4-2-2. 커밋 메시지 유형
67-
| 유형 | 설명 |
68-
|:----------------------|:--------------------------------|
69-
| **feature** | **새로운 기능 추가** |
70-
| **refactor** | **코드 리팩토링 (기능 변화 없이 구조 개선)** |
71-
| **fix** | **일반적인 버그 수정** |
72-
| **docs** | **문서 수정 (README, 주석, 위키 등)** |
73-
| **test** | **테스트 코드 추가** |
74-
| **style** | **코드 포맷팅 (공백, 세미콜론 등 스타일 변경)** |
75-
| **chore** | **기타 관리 작업 (라이브러리 업데이트 등)** |
76-
| **comment** | **주석 추가 및 변경** |
77-
| **rename** | **파일/폴더명 수정 및 위치 이동** |
78-
| **remove** | **파일 삭제** |
79-
| **!BREAKING CHANGE** | **큰 API 변경** | | **fix** | **버그 수정** |
80-
| **!HOTFIX** | **긴급한 버그 수정** |
81-
82-
#### 4-2-3. 커밋 메시지 예시
83191
```
84192
feature: 로그인 API 구현
85193
refactor: UserService 로직 분리
86194
```
195+
87196
---
197+
<div id="7"></div>
198+
199+
## 🌱 Git 브랜치 전략
200+
201+
### ✅ 기본 브랜치
202+
203+
#### 유형
88204

89-
## 🌱 5. Git 브랜치 전략
90-
### ✅ 5-1. 기본 브랜치
91-
#### 5-1-1. 유형
92205
- main: 실제 운영 배포 브랜치
93206
- dev: 개발 통합 브랜치
94207

95-
#### 5-1-2. 보호 규칙
208+
#### 보호 규칙
209+
96210
- main, dev 브랜치에 대한 직접적인 커밋 또는 푸시 금지
97211
- 모든 변경 사항은 반드시 Pull Request(PR)를 통해 코드 리뷰 후 병합
98-
- PR 병합 전에 필수 CI 테스트 통과
212+
- PR 병합 전에 필수 CI 테스트 통과
213+
214+
### 작업 브랜치 네이밍 규칙
215+
216+
#### 브랜치명 구조
99217

100-
### ✅ 5-2. 작업 브랜치 네이밍 규칙
101-
#### 5-2-1. 브랜치명 구조
102218
```
103219
<브랜치 유형>/<이슈 번호>/<기능명>
104220
```
105221

106-
#### 5-2-2. 브랜치명 유형
107-
| 유형 | 설명 |
108-
|:----------------------|:-------------------------------|
109-
| **feature/이슈번호/요약** | **새로운 기능 추가** |
110-
| **refactor/이슈번호/요약** | **코드 리팩토링 (기능 변화 없이 구조 개선)** |
111-
| **fix/이슈번호/요약** | **일반적인 버그 수정** |
112-
| **docs/이슈번호/요약** | **문서 수정 (README, 주석, 위키 등)** |
113-
| **test/이슈번호/요약** | **테스트 코드 추가** |
114-
| **chore/이슈번호/요약** | **기타 관리 작업 (라이브러리 업데이트 등)** |
115-
| **hotfix/이슈번호/요약** | **긴급한 버그 수정** |
116-
117-
#### 5-2-3. 브랜치명 예시
222+
#### 브랜치명 유형
223+
224+
| 유형 | 설명 |
225+
|:---------------------|:-----------------------------|
226+
| **feature/이슈번호/요약** | **새로운 기능 추가** |
227+
| **refactor/이슈번호/요약** | **코드 리팩토링 (기능 변화 없이 구조 개선)** |
228+
| **fix/이슈번호/요약** | **일반적인 버그 수정** |
229+
| **docs/이슈번호/요약** | **문서 수정 (README, 주석, 위키 등)** |
230+
| **test/이슈번호/요약** | **테스트 코드 추가** |
231+
| **chore/이슈번호/요약** | **기타 관리 작업 (라이브러리 업데이트 등)** |
232+
| **hotfix/이슈번호/요약** | **긴급한 버그 수정** |
233+
234+
#### 브랜치명 예시
235+
118236
```
119237
chore/1/github-initial-setup
120238
fix/57/image-preview
121239
```
122240

123-
### ✅ 5-3. PR 및 이슈 연동 규칙
241+
### PR 및 이슈 연동 규칙
242+
124243
- PR 생성 시 반드시 관련 이슈를 연결합니다.
244+
125245
```
126246
ex) 관련 이슈: #3
127247
```
248+
128249
---

0 commit comments

Comments
 (0)