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```
84192feature: 로그인 API 구현
85193refactor: 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```
119237chore/1/github-initial-setup
120238fix/57/image-preview
121239```
122240
123- ### ✅ 5-3. PR 및 이슈 연동 규칙
241+ ### PR 및 이슈 연동 규칙
242+
124243- PR 생성 시 반드시 관련 이슈를 연결합니다.
244+
125245```
126246ex) 관련 이슈: #3
127247```
248+
128249---
0 commit comments