527 lines
15 KiB
Markdown
527 lines
15 KiB
Markdown
# EAPIM Portal
|
|
|
|
광주은행 엔터프라이즈 API 포털 관리 시스템
|
|
|
|
## 프로젝트 클론 (Git Clone)
|
|
|
|
아래 스크립트를 복사하여 한 번에 실행하면 모든 프로젝트를 클론합니다:
|
|
|
|
```bash
|
|
# 변수 설정 (환경에 맞게 수정하세요)
|
|
GIT_URL="ssh://git@192.168.240.178:18081/eapim"
|
|
PROJECT_HOME="/c/eactive/workspaces/kjb-eapim-devPortal"
|
|
DEFAULT_BRANCH="jenkins_with_weblogic"
|
|
|
|
# 프로젝트 홈 디렉토리 생성 및 이동
|
|
mkdir -p "$PROJECT_HOME"
|
|
cd "$PROJECT_HOME"
|
|
|
|
# 메인 프로젝트 클론
|
|
git clone -b "$DEFAULT_BRANCH" "$GIT_URL/kjb-eapim.git" kjb-eapim
|
|
|
|
# 의존 모듈 클론 (kjb-eapim 폴더와 동일 레벨)
|
|
mkdir -p eapim-online
|
|
git clone -b "$DEFAULT_BRANCH" "$GIT_URL/elink-online-core-jpa.git" eapim-online/elink-online-core-jpa
|
|
git clone -b "$DEFAULT_BRANCH" "$GIT_URL/elink-portal-common.git" elink-portal-common
|
|
git clone -b "$DEFAULT_BRANCH" "$GIT_URL/kjb-safedb.git" kjb-safedb
|
|
|
|
# 클론 후 폴더 구조 확인
|
|
echo "=== 프로젝트 구조 ==="
|
|
ls -la "$PROJECT_HOME"
|
|
```
|
|
|
|
### 클론 후 폴더 구조
|
|
|
|
```
|
|
$PROJECT_HOME/
|
|
├── kjb-eapim/ # 메인 프로젝트
|
|
│ └── eapim-portal/ # 이 프로젝트 (Portal)
|
|
├── eapim-online/ # Gateway 데이터 모델
|
|
│ └── elink-online-core-jpa/ # JPA 엔티티 모듈
|
|
├── elink-portal-common/ # 공통 유틸리티
|
|
└── kjb-safedb/ # SafeDB 암호화 라이브러리
|
|
```
|
|
|
|
### 의존 관계 (settings.gradle 참조)
|
|
|
|
```
|
|
eapim-portal
|
|
├── elink-online-core-jpa → ../eapim-online/elink-online-core-jpa
|
|
├── elink-portal-common → ../elink-portal-common
|
|
└── kjb-safedb → ../kjb-safedb
|
|
```
|
|
|
|
## 프로젝트 개요
|
|
|
|
**EAPIM Portal**은 광주은행의 API 서비스를 관리하고, 사용자 등록, API 키 발급, 문서화, 테스트 기능을 제공하는 웹 기반 플랫폼입니다.
|
|
|
|
## 기술 스택
|
|
|
|
- Spring Boot 2.7.18
|
|
- Java 8
|
|
- Gradle 8.7
|
|
- Oracle 19c
|
|
- Spring Security
|
|
- JPA/Hibernate 5.6.15 with Envers
|
|
- MapStruct, Lombok
|
|
|
|
## 초기 세팅 가이드
|
|
|
|
### 사전 요구사항
|
|
|
|
아래 도구 설치 및 검증 절차는 별도 문서로 분리되어 있습니다. 신규 개발자는 먼저 이 문서를 끝까지 진행하세요.
|
|
|
|
📄 **[개발환경 준비 사항](djb-docs/개발환경-준비-사항.md)** — JDK 8 · Gradle 8.7 · Git · Oracle 19c · Node.js & SASS · direnv · IDE 설정
|
|
|
|
요약:
|
|
|
|
- JDK 8 (Zulu 권장)
|
|
- Gradle 8.7 (gradlew 사용 금지)
|
|
- Git
|
|
- Oracle 19c 접근 (개발: `192.168.240.177:1599`)
|
|
- Node.js 18 LTS 이상 (SCSS 컴파일용)
|
|
|
|
### Git Bash에서 초기 세팅
|
|
|
|
```bash
|
|
# ====================================
|
|
# 1. 변수 설정 (프로젝트 경로 및 브랜치)
|
|
# ====================================
|
|
export WORKSPACE_DIR="/c/eactive/workspaces/kjb-eapim"
|
|
export PROJECT_BRANCH="jenkins_with_weblogic"
|
|
|
|
# Git Repository URL 설정
|
|
# 기본: ssh://git@192.168.240.178:18081/eapim
|
|
# 대체: https://git.eactive.synology.me:8090/kjb-eapim
|
|
export GIT_REPO_BASE="ssh://git@192.168.240.178:18081/eapim"
|
|
# export GIT_REPO_BASE="https://git.eactive.synology.me:8090/kjb-eapim"
|
|
|
|
# Gradle 명령어 설정
|
|
export GRADLE_CMD="gradle"
|
|
|
|
# ====================================
|
|
# 2. 작업 디렉토리 생성
|
|
# ====================================
|
|
mkdir -p $WORKSPACE_DIR
|
|
cd $WORKSPACE_DIR
|
|
|
|
# ====================================
|
|
# 3. eapim-portal 프로젝트 클론
|
|
# ====================================
|
|
git clone ${GIT_REPO_BASE}/eapim-portal.git
|
|
cd eapim-portal
|
|
|
|
# 프로젝트 브랜치로 체크아웃
|
|
git checkout $PROJECT_BRANCH
|
|
|
|
# ====================================
|
|
# 4. eapim-online 프로젝트 클론 (elink-online-core-jpa 포함)
|
|
# ====================================
|
|
cd $WORKSPACE_DIR
|
|
git clone ${GIT_REPO_BASE}/eapim-online.git
|
|
cd eapim-online
|
|
git checkout $PROJECT_BRANCH
|
|
|
|
# ====================================
|
|
# 5. 의존 모듈 클론
|
|
# ====================================
|
|
cd $WORKSPACE_DIR
|
|
|
|
# elink-portal-common 클론
|
|
git clone ${GIT_REPO_BASE}/elink-portal-common.git
|
|
cd elink-portal-common
|
|
git checkout master # 또는 필요한 브랜치
|
|
|
|
# ====================================
|
|
# 6. 최종 폴더 구조 확인
|
|
# ====================================
|
|
# kjb-eapim/
|
|
# ├── eapim-portal/
|
|
# ├── eapim-online/
|
|
# │ └── elink-online-core-jpa/
|
|
# ├── elink-portal-common/
|
|
|
|
# ====================================
|
|
# 7. eapim-portal 프로젝트로 이동 및 디펜던시 다운로드
|
|
# ====================================
|
|
cd $WORKSPACE_DIR/eapim-portal
|
|
|
|
# Gradle 디펜던시 다운로드
|
|
$GRADLE_CMD dependencies
|
|
```
|
|
|
|
### Windows CMD에서 초기 세팅
|
|
|
|
```cmd
|
|
REM ====================================
|
|
REM 1. 변수 설정 (프로젝트 경로 및 브랜치)
|
|
REM ====================================
|
|
set WORKSPACE_DIR=C:\eactive\workspaces\kjb-eapim
|
|
set PROJECT_BRANCH=jenkins_with_weblogic
|
|
|
|
REM Git Repository URL 설정
|
|
REM 기본: ssh://git@192.168.240.178:18081/eapim
|
|
REM 대체: https://git.eactive.synology.me:8090/kjb-eapim
|
|
set GIT_REPO_BASE=ssh://git@192.168.240.178:18081/eapim
|
|
REM set GIT_REPO_BASE=https://git.eactive.synology.me:8090/kjb-eapim
|
|
|
|
REM Gradle 명령어 설정
|
|
set GRADLE_CMD=gradle
|
|
|
|
REM ====================================
|
|
REM 2. 작업 디렉토리 생성
|
|
REM ====================================
|
|
if not exist "%WORKSPACE_DIR%" mkdir "%WORKSPACE_DIR%"
|
|
cd /d "%WORKSPACE_DIR%"
|
|
|
|
REM ====================================
|
|
REM 3. eapim-portal 프로젝트 클론
|
|
REM ====================================
|
|
git clone %GIT_REPO_BASE%/eapim-portal.git
|
|
cd eapim-portal
|
|
|
|
REM 프로젝트 브랜치로 체크아웃
|
|
git checkout %PROJECT_BRANCH%
|
|
|
|
REM ====================================
|
|
REM 4. eapim-online 프로젝트 클론 (elink-online-core-jpa 포함)
|
|
REM ====================================
|
|
cd /d "%WORKSPACE_DIR%"
|
|
git clone %GIT_REPO_BASE%/eapim-online.git
|
|
cd eapim-online
|
|
git checkout %PROJECT_BRANCH%
|
|
|
|
REM ====================================
|
|
REM 5. 의존 모듈 클론
|
|
REM ====================================
|
|
cd /d "%WORKSPACE_DIR%"
|
|
|
|
REM elink-portal-common 클론
|
|
git clone %GIT_REPO_BASE%/elink-portal-common.git
|
|
cd elink-portal-common
|
|
git checkout master
|
|
|
|
REM ====================================
|
|
REM 6. 최종 폴더 구조 확인
|
|
REM ====================================
|
|
REM kjb-eapim\
|
|
REM ├── eapim-portal\
|
|
REM ├── eapim-online\
|
|
REM │ └── elink-online-core-jpa\
|
|
REM ├── elink-portal-common\
|
|
|
|
REM ====================================
|
|
REM 7. eapim-portal 프로젝트로 이동 및 디펜던시 다운로드
|
|
REM ====================================
|
|
cd /d "%WORKSPACE_DIR%\eapim-portal"
|
|
|
|
REM Gradle 디펜던시 다운로드
|
|
%GRADLE_CMD% dependencies
|
|
```
|
|
|
|
### 환경별 설정 파일
|
|
|
|
프로젝트 클론 후 필요한 환경 설정을 수정하세요:
|
|
|
|
- `src/main/resources/application-dev.yml` - 개발 환경
|
|
- `src/main/resources/application-stage.yml` - 스테이징 환경
|
|
- `src/main/resources/application-prod.yml` - 운영 환경
|
|
- `src/main/resources/application-gf63.yml` - 개인 개발 환경
|
|
|
|
### 데이터베이스 설정
|
|
|
|
개발 환경(dev)에서는 `application-dev.yml`에 데이터베이스 설정이 포함되어 있습니다.
|
|
스테이징/운영 환경에서는 JNDI 데이터소스가 필요합니다:
|
|
|
|
- `jdbc/dsOBP_EMS` - Portal 데이터베이스
|
|
- `jdbc/dsOBP_AGW` - Gateway 데이터베이스
|
|
|
|
### 주의사항
|
|
|
|
- **gradlew 사용 금지**: 반드시 시스템에 설치된 gradle을 직접 사용하거나 환경에 맞는 스크립트를 사용하세요
|
|
- **Gradle 명령어 변수화**: 위의 `GRADLE_CMD` 변수를 설정하면 환경별로 다른 gradle 명령어 사용 가능
|
|
|
|
## 빌드 및 실행
|
|
|
|
### Gradle 명령어 설정
|
|
|
|
**Git Bash:**
|
|
```bash
|
|
export GRADLE_CMD="gradle"
|
|
```
|
|
|
|
**Windows CMD:**
|
|
```cmd
|
|
set GRADLE_CMD=gradle
|
|
```
|
|
|
|
### 빌드 및 실행 명령어
|
|
|
|
```bash
|
|
# 개발 환경 실행
|
|
$GRADLE_CMD bootRun
|
|
# 또는: %GRADLE_CMD% bootRun (CMD)
|
|
|
|
# WAR 빌드
|
|
$GRADLE_CMD bootWar
|
|
|
|
# 테스트
|
|
$GRADLE_CMD test
|
|
|
|
# 컴파일만 수행
|
|
$GRADLE_CMD classes
|
|
|
|
# 전체 빌드
|
|
$GRADLE_CMD clean build
|
|
```
|
|
|
|
**주의**: gradlew 사용 금지 - offline gradle 단독 실행
|
|
|
|
## 프로젝트 구조
|
|
|
|
### 전체 프로젝트 구조
|
|
```
|
|
kjb-eapim/
|
|
├── eapim-portal/ # Portal 웹 애플리케이션 (현재 프로젝트)
|
|
├── eapim-online/ # Online 프로젝트
|
|
│ └── elink-online-core-jpa/ # Gateway 데이터 모델
|
|
├── elink-portal-common/ # 공통 유틸리티
|
|
```
|
|
|
|
### eapim-portal 내부 구조
|
|
```
|
|
src/main/java/com/eactive/apim/portal/
|
|
├── apps/ # 기능 모듈 (user, app, approval, apis, etc.)
|
|
├── common/ # 공통 관심사
|
|
├── config/ # Spring 설정
|
|
└── gateway/ # Gateway DB 접근
|
|
```
|
|
|
|
## 외부 모듈
|
|
|
|
이 프로젝트는 다음 모듈에 의존합니다 (settings.gradle 참조):
|
|
- `eapim-online/elink-online-core-jpa`: Gateway 데이터 모델 (../eapim-online/elink-online-core-jpa)
|
|
- `elink-portal-common`: 공통 유틸리티 (../elink-portal-common)
|
|
|
|
## SASS / CSS 스타일 개발
|
|
|
|
### 개요
|
|
|
|
이 프로젝트는 **Dart Sass**를 사용하여 CSS를 관리합니다.
|
|
`src/main/resources/static/css/main.css`는 SASS에서 컴파일된 결과물이므로 **직접 수정하면 안 됩니다.**
|
|
스타일 변경은 반드시 `src/main/resources/static/sass/` 하위 파일을 수정하세요.
|
|
|
|
### 설치
|
|
|
|
Node.js 및 SASS 설치 절차는 [개발환경 준비 사항 § 6. Node.js & SASS 빌드 환경](djb-docs/개발환경-준비-사항.md#6-nodejs--sass-빌드-환경) 을 참고하세요.
|
|
|
|
Node.js가 이미 설치되어 있다면 프로젝트 의존성만 설치하면 됩니다:
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
### 빌드 명령어
|
|
|
|
```bash
|
|
# 1회 컴파일 (개발용, 들여쓰기 유지)
|
|
npm run sass:build
|
|
|
|
# 1회 컴파일 (배포용, minified)
|
|
npm run sass:build:minified
|
|
|
|
# 파일 변경 감지 후 자동 컴파일 (개발 중 권장)
|
|
npm run sass:watch
|
|
|
|
# 빌드 + minified 동시 생성
|
|
npm run build
|
|
|
|
# 단축 스크립트 (npm 없이 sass 직접 실행)
|
|
./sass-build.sh
|
|
```
|
|
|
|
### SASS 파일 구조
|
|
|
|
```
|
|
src/main/resources/static/sass/
|
|
├── main.scss # 진입점 - 모든 파일을 @use로 조합
|
|
│
|
|
├── abstracts/ # CSS 출력 없는 헬퍼 (변수, 믹스인 등)
|
|
│ ├── _variables.scss # 색상, 타이포그래피, 그림자 변수
|
|
│ ├── _mixins.scss # 재사용 믹스인
|
|
│ └── _color-functions.scss # Dart Sass 3.0 color 유틸리티
|
|
│
|
|
├── base/ # 전역 기본 스타일
|
|
│ ├── _reset.scss
|
|
│ ├── _typography.scss
|
|
│ ├── _animations.scss
|
|
│ ├── _kjb-font.scss # 광주은행 전용 폰트
|
|
│ └── _utilities.scss # 유틸리티 클래스
|
|
│
|
|
├── layout/ # 페이지 레이아웃 구조
|
|
│ ├── _header.scss
|
|
│ ├── _footer.scss
|
|
│ ├── _grid.scss
|
|
│ └── _container.scss
|
|
│
|
|
├── components/ # 재사용 UI 컴포넌트
|
|
│ ├── _buttons.scss
|
|
│ ├── _forms.scss
|
|
│ ├── _modals.scss # customPopup 모달 스타일
|
|
│ ├── _tables.scss
|
|
│ ├── _badges.scss
|
|
│ ├── _cards.scss
|
|
│ ├── _navigation.scss
|
|
│ ├── _pagination.scss
|
|
│ └── ...
|
|
│
|
|
├── pages/ # 페이지별 스타일
|
|
│ ├── _mypage.scss
|
|
│ ├── _login.scss
|
|
│ ├── _apikey-list.scss
|
|
│ └── ...
|
|
│
|
|
├── themes/
|
|
│ └── _dark.scss # 다크 테마 (예약)
|
|
│
|
|
└── vendors/
|
|
└── _overrides.scss # 외부 라이브러리 스타일 덮어쓰기
|
|
```
|
|
|
|
### 새 스타일 추가하는 방법
|
|
|
|
#### 1. 기존 컴포넌트/페이지 파일에 추가
|
|
해당 `_*.scss` 파일을 직접 수정합니다.
|
|
|
|
```scss
|
|
// components/_buttons.scss 예시
|
|
.btn-withdrawal {
|
|
color: $text-gray;
|
|
border: 1px solid $border-gray;
|
|
|
|
&:hover {
|
|
color: $accent-orange;
|
|
}
|
|
}
|
|
```
|
|
|
|
#### 2. 새 페이지 스타일 파일 추가
|
|
|
|
```bash
|
|
# 1. 파일 생성 (언더스코어 접두사 필수)
|
|
touch src/main/resources/static/sass/pages/_new-page.scss
|
|
|
|
# 2. main.scss 에 @use 추가
|
|
```
|
|
|
|
```scss
|
|
// main.scss 에 추가
|
|
@use 'pages/new-page' as *;
|
|
```
|
|
|
|
#### 3. 변수 활용 예시
|
|
|
|
```scss
|
|
// abstracts/_variables.scss 에 정의된 변수 사용
|
|
.my-component {
|
|
color: $primary-blue; // #0049b4 (광주은행 블루)
|
|
background: $gray-bg; // #F8FAFC
|
|
border: 1px solid $border-gray; // #E2E8F0
|
|
box-shadow: $shadow-md;
|
|
font-family: $font-family-primary;
|
|
}
|
|
```
|
|
|
|
### 컴파일 결과 확인
|
|
|
|
```bash
|
|
# 컴파일 후 출력 파일 확인
|
|
ls -lh src/main/resources/static/css/main.css
|
|
ls -lh src/main/resources/static/css/main.min.css # minified
|
|
```
|
|
|
|
### 주의사항
|
|
|
|
- `src/main/resources/static/css/main.css` **직접 수정 금지** — SASS 재컴파일 시 덮어씌워짐
|
|
- `style2.css` 는 레거시 파일(구 디자인 시스템)이며 `main.css` 와 **별도로 관리됨**
|
|
- `@import` 대신 **`@use`** 사용 (Dart Sass 3.0 호환)
|
|
- 파일명 앞에 언더스코어(`_`) 필수 — `_filename.scss` 형식이어야 단독 컴파일되지 않음
|
|
|
|
---
|
|
|
|
## AI 코딩 어시스턴트 지침 파일
|
|
|
|
이 프로젝트는 여러 AI 코딩 어시스턴트를 지원합니다. 각 도구는 다음 파일을 참조합니다:
|
|
|
|
### 지침 파일 위치
|
|
|
|
| AI 도구 | 지침 파일 경로 | 용도 |
|
|
|---------|---------------|------|
|
|
| **Claude Code** | `CLAUDE.md` | 마스터 지침 파일 (한글) |
|
|
| **GitHub Copilot** | `.github/copilot-instructions.md` | Copilot용 지침 |
|
|
| **Cursor** | `.cursorrules` | Cursor용 간결한 규칙 |
|
|
|
|
### 지침 파일 관리 방법
|
|
|
|
1. **마스터 파일**: `CLAUDE.md`
|
|
- 가장 상세한 프로젝트 지침을 포함
|
|
- 한글로 작성되어 한국 개발팀이 이해하기 쉬움
|
|
- 수정 시 이 파일을 먼저 업데이트
|
|
|
|
2. **동기화**:
|
|
```bash
|
|
# CLAUDE.md 수정 후 다른 파일들 동기화
|
|
cp CLAUDE.md .github/copilot-instructions.md
|
|
# .cursorrules는 간결한 버전이므로 필요시 수동 업데이트
|
|
```
|
|
|
|
3. **새로운 AI 도구 지원 추가**:
|
|
- Windsurf: `.windsurfrules` 파일 생성
|
|
- 기타 도구: 해당 도구의 규칙 파일명 확인 후 생성
|
|
|
|
### 지침 파일에 포함된 내용
|
|
|
|
- 프로젝트 개요 및 기술 스택
|
|
- 빌드 명령어 및 개발 환경 설정
|
|
- 아키텍처 구조 (멀티 모듈, 이중 DB)
|
|
- 주요 기능 및 비즈니스 로직
|
|
- 개발 패턴 및 코딩 컨벤션
|
|
- 보안, 트랜잭션, 로깅 가이드
|
|
- 테스트 패턴
|
|
- 배포 방법
|
|
|
|
## 환경 설정
|
|
|
|
### 프로파일
|
|
|
|
- **dev**: 개발 환경
|
|
- **stage**: 스테이징 환경
|
|
- **prod**: 운영 환경
|
|
- **gf63**: 개인 개발 환경
|
|
- **kjb_rinjae**: 개인 개발 환경
|
|
|
|
### 데이터베이스
|
|
|
|
- **EMS Database**: Portal 사용자, 조직, API 키
|
|
- **Gateway Database**: API 명세, 서비스
|
|
|
|
## 주요 기능
|
|
|
|
- 사용자 관리 (내부/기업)
|
|
- API 키 관리 및 승인 워크플로우
|
|
- 감사 추적 (Hibernate Envers)
|
|
|
|
## 배포
|
|
|
|
### 지원 서버
|
|
- JEUS
|
|
- WebLogic
|
|
- Tomcat (내장)
|
|
|
|
## 문서
|
|
|
|
- **개발환경 준비 사항**: [`djb-docs/개발환경-준비-사항.md`](djb-docs/개발환경-준비-사항.md) — JDK·Gradle·Node.js·SASS 설치 가이드
|
|
- **프로젝트 상세 지침**: `CLAUDE.md` (한글)
|
|
- **사용자 가이드**: `개발자포탈.md` (한글)
|
|
- **빌드 스크립트**: `build-gf63.sh`, `deploy_portal.sh`
|