APIS api 추가

This commit is contained in:
Rinjae
2025-12-18 13:24:00 +09:00
parent c4fbd276b9
commit d26bc6fdb7
6 changed files with 543 additions and 33 deletions
+89 -32
View File
@@ -91,11 +91,13 @@ kjb-gradle.sh tasks --all
1. **IDE 설정 파일 생성 (최초 1회)**
```bash
# IntelliJ IDEA 사용 시
kjb-gradle.sh idea
# Eclipse 사용 시
# Eclipse 사용 시 (기본)
kjb-gradle.sh eclipse
# IntelliJ IDEA 사용 시 (build.gradle.intellij 파일 사용 필요)
# 1. build.gradle을 build.gradle.eclipse로 백업
# 2. build.gradle.intellij를 build.gradle로 복사
# 3. kjb-gradle.sh idea 실행
```
2. **QueryDSL 등 소스 코드 생성**
@@ -109,7 +111,8 @@ kjb-gradle.sh tasks --all
```
4. **IDE에서 프로젝트 열기**
- `kjb-gradle.sh idea` 또는 `kjb-gradle.sh eclipse` 실행 후, IDE에서 프로젝트를 엽니다.
- Eclipse: `kjb-gradle.sh eclipse` 실행 후, IDE에서 프로젝트를 엽니다.
- IntelliJ: IntelliJ 전용 `build.gradle.intellij`를 `build.gradle`로 교체 후 사용합니다.
5. **실행 구성(Run Configuration) 설정**
- 사용하는 WAS(Tomcat 등)에 `eapim-admin` 프로젝트를 배포하도록 설정합니다.
@@ -156,26 +159,24 @@ eapim-admin (root project)
- **Lombok**: 애노테이션 프로세싱을 통한 Getters/setters/builders
- **MapStruct**: DTO와 엔티티 간의 객체 매퍼
#### 이중 Q-Class 생성 (Gradle + Eclipse)
#### Q-Class 생성 위치
이 프로젝트는 **Gradle과 Eclipse 애노테이션 프로세서 모두를 사용**하므로, Q-classes가 **두 위치에 생성**됩니다:
1. **`build/generated/java/`** - `kjb-gradle.sh compileJava` 또는 `kjb-gradle.sh build` 실행 시 Gradle이 생성
2. **`WebContent/generated/`** - Eclipse IDE에서 빌드 시 Eclipse APT가 생성
**이는 예상된 동작이며 의도적입니다.** 두 디렉토리 모두 `.gitignore`에 포함되어 있으며 커밋해서는 안 됩니다.
Q-classes는 `build/generated/java/` 디렉토리에 생성됩니다.
- `kjb-gradle.sh compileJava` 또는 `kjb-gradle.sh build` 실행 시 Gradle이 자동으로 생성
- 이 디렉토리는 `.gitignore`에 포함되어 있으며 커밋해서는 안 됩니다
#### 생성된 코드 작업하기
- **Gradle 빌드**: `build/generated/java/`의 Q-classes가 자동으로 classpath에 포함됩니다
- **Eclipse IDE**: `WebContent/generated/`의 Q-classes가 자동으로 classpath에 포함됩니다
- **업데이트 pull 후**: `kjb-gradle.sh compileJava`를 실행하거나 Eclipse 프로젝트를 새로고침하여 Q-classes를 재생성합니다
- **Q-classes IDE 오류 시**: `kjb-gradle.sh clean compileJava` 또는 Eclipse → Project → Clean으로 재생성합니다
- **업데이트 pull 후**: `kjb-gradle.sh compileJava`를 실행하여 Q-classes를 재생성합니다
- **Q-classes IDE 오류 시**: `kjb-gradle.sh clean compileJava` 재생성합니다
중복이 문제를 일으키지 않는 이유:
- 두 도구 모두 동일한 JPA 엔티티에서 동일한 Q-classes를 생성합니다
- 두 출력 디렉토리 모두 gitignore됩니다
- 각 도구는 자체 생성 클래스를 사용합니다 (classpath 충돌 없음)
#### IDE별 빌드 설정 파일
- **`build.gradle`**: Eclipse 전용 (기본, Eclipse APT 플러그인 포함)
- **`build.gradle.intellij`**: IntelliJ IDEA 전용
IntelliJ를 사용하려면 `build.gradle.intellij`를 `build.gradle`로 교체해야 합니다.
## 로컬 개발 환경 설정
@@ -315,6 +316,50 @@ com.eactive.eai
리포지토리는 Spring Data JPA 규칙을 사용하며, 서비스는 `@Service`, 컨트롤러는 `@RestController`/`@Controller`를 사용합니다.
### Multi-tenancy (동적 스키마 전환)
애플리케이션은 Hibernate Multi-tenancy를 사용하여 **런타임에 스키마를 동적으로 전환**합니다.
**핵심 컴포넌트:**
- `DataSourceContextHolder` - ThreadLocal로 현재 데이터소스 타입 관리
- `DataSourceTypeManager` - 데이터소스 타입 상수 정의 (MONITORING, APIGW, EAI, BAT 등)
- `TenantIdentifierResolver` - `DataSourceContextHolder`에서 tenant 식별자 반환
- `ConfigurableMultiTenantConnectionProvider` - tenant에 따라 `connection.setSchema()` 호출
- `DataSourceTypeInterceptor` - 요청 파라미터 `serviceType`에서 데이터소스 자동 설정
**동작 흐름:**
1. `DataSourceTypeInterceptor.preHandle()` → `request.getParameter("serviceType")` 읽음
2. `DataSourceContextHolder.setDataSourceType(dataSourceType)` 설정
3. JPA 쿼리 실행 시 `TenantIdentifierResolver` → `DataSourceContextHolder`에서 tenant 반환
4. `ConfigurableMultiTenantConnectionProvider` → `connection.setSchema(schema)` 호출
**사용 방법:**
1. **URL 파라미터 방식** (인터셉터가 자동 처리):
```
/api/endpoint?serviceType=APIGW
```
2. **Controller에서 명시적 설정** (특정 데이터소스 강제):
```java
@Controller
public class MyController {
@RequestMapping("/my/api.json")
public String myApi() {
// 서비스 호출 전에 데이터소스 설정
DataSourceContextHolder.setDataSourceType(
DataSourceTypeManager.getDataSourceType(DataSourceTypeManager.APIGW));
return myService.getData();
}
}
```
**주의사항:**
- `@PersistenceContext`만 사용 (기본 `entityManagerFactory` 사용, Multi-tenancy 적용됨)
- `@PersistenceContext(unitName = "entityManagerFactoryForEMS")`는 **Multi-tenancy 미적용** (MONITORING 스키마 고정)
- Controller에서 `DataSourceContextHolder` 설정 후 Service 메서드를 호출해야 트랜잭션 시작 시점에 올바른 스키마가 적용됨
### 주요 초기화
- `AppInitializer` - 시스템 프로퍼티를 설정하는 메인 애플리케이션 시작 빈
- `CustomizingAppInitializer` - 고객사별 초기화
@@ -328,19 +373,7 @@ com.eactive.eai
## IDE 설정
### Eclipse
```bash
kjb-gradle.sh eclipse
```
다음을 생성합니다:
- `.project` 및 `.classpath` 파일
- Eclipse WTP 설정 (context path: `/monitoring`)
- UTF-8 인코딩 설정
- QueryDSL/Lombok을 위한 애노테이션 프로세서 설정
### IntelliJ IDEA
### IntelliJ IDEA (권장)
```bash
kjb-gradle.sh idea
@@ -348,6 +381,30 @@ kjb-gradle.sh idea
또는 IntelliJ에서 직접 "Import Gradle Project"를 사용합니다.
기본 `build.gradle`은 IntelliJ 전용으로 설정되어 있습니다.
### Eclipse
Eclipse를 사용하려면 Eclipse APT 플러그인이 포함된 별도의 빌드 설정 파일을 사용해야 합니다:
```bash
# 1. 기존 build.gradle 백업 (필요시)
cp build.gradle build.gradle.intellij
# 2. Eclipse 전용 설정으로 교체
cp build.gradle.eclipse build.gradle
# 3. Eclipse 프로젝트 생성
kjb-gradle.sh eclipse
```
Eclipse 전용 설정(`build.gradle.eclipse`)은 다음을 포함합니다:
- `com.diffplug.eclipse.apt` 플러그인 (Eclipse APT 지원)
- `.project` 및 `.classpath` 파일 생성
- Eclipse WTP 설정 (context path: `/monitoring`)
- UTF-8 인코딩 설정
- QueryDSL/Lombok을 위한 애노테이션 프로세서 설정
## 테스트
테스트에 사용되는 것들: