# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## 프로젝트 개요

`eapim-admin-kjb`는 광주은행(KJB) 전용 커스터마이징을 위한 eapim-admin 확장 모듈입니다. 빠른 부팅 속도를 위해 메인 eapim-admin 프로젝트에서 분리되어 독립적으로 테스트할 수 있습니다.

## 빌드 및 테스트 명령어

```bash
# 빌드
gradle build
gradle clean build

# 테스트 실행 (환경변수 필요)
KJB_EAPIM_TEST_ENABLED=TRUE gradle :eapim-admin-kjb:test

# 특정 테스트 클래스 실행
KJB_EAPIM_TEST_ENABLED=TRUE gradle :eapim-admin-kjb:test --tests "com.eactive.ext.kjb.ums.test.UmsTest.testSms"
KJB_EAPIM_TEST_ENABLED=TRUE gradle :eapim-admin-kjb:test --tests "com.eactive.ext.kjb.ums.test.UmsTest.testEmail"

# SafeDB 실제 모드로 테스트 (Linux 서버)
KJB_EAPIM_TEST_ENABLED=TRUE gradle :eapim-admin-kjb:test -Psafedb
```

**테스트 실행 조건**: `KJB_EAPIM_TEST_ENABLED=TRUE` 환경변수가 설정되어야 UMS/이메일 테스트가 실행됩니다.

## 모듈 의존성

```
eapim-admin-kjb
├── elink-portal-common    # JPA 엔티티 (MessageRequest, MessageCode 등)
└── kjb-safedb            # 암호화 라이브러리
```

의존 모듈들은 `../elink-portal-common/`, `../kjb-safedb/` 경로에 위치합니다.

## 아키텍처

### 주요 컴포넌트

| 컴포넌트 | 위치 | 설명 |
|---------|------|------|
| `KjbProperty` | `common/` | DB 테이블 `TSEAIRM24`에서 로드되는 설정 관리. `@KjbPropertyValue` 애노테이션으로 키 매핑 |
| `KjbEaiBatchModule` | `eai/` | EAI 배치 시스템 HTTP 연동. 파일 기반 배치 전송 및 보관 기간 관리 |
| `KjbUmsService` | `ums/` | UMS API를 통한 카카오 알림톡 발송 |
| `KjbEmailSendModule` | `ums/` | EAI 배치를 통한 이메일 발송. 파일 생성 후 배치 호출 |
| `KjbObpModule` | `obp/` | OBP(Open Banking Platform) API 연동 |

### 프로퍼티 키 목록 (`KjbProperty.java`)

**EAI 배치 연동**
- `kjb.eai.batch.url` - EAI 배치 서버 URL
- `kjb.eai.batch.connection_timeout` - 연결 타임아웃 (초, 기본값: 5)
- `kjb.eai.batch.response_timeout` - 응답 타임아웃 (초, 기본값: 5)
- `kjb.eai.batch.charset` - 문자셋 (기본값: euc-kr)

**이메일 발송 (EAI 배치 경유)**
- `kjb.ums.eai_batch.send_dir` - 발송 파일 디렉토리
- `kjb.ums.eai_batch.backup_dir` - 백업 디렉토리
- `kjb.ums.eai_batch.error_dir` - 에러 디렉토리
- `kjb.ums.eai_batch.interface_id` - 인터페이스 ID (13자리)
- `kjb.ums.eai_batch.retention_date` - 파일 보관 기간 (일, 기본값: 60)

**UMS (카카오 알림톡)**
- `kjb.ums.host` - UMS API 엔드포인트
- `kjb.ums.api_key` - API 인증 키 (36자리 UUID 형식)
- `kjb.ums.connection_timeout` - 연결 타임아웃 (초, 기본값: 5)
- `kjb.ums.response_timeout` - 응답 타임아웃 (초, 기본값: 5)

**OBP 연동**
- `kjb.obp.url` - OBP API URL
- `kjb.obp.trust_system.key/value` - 신뢰 시스템 헤더
- `kjb.obp.partner_code.key/value` - 파트너 코드 헤더

### 메시지 채널

- `KjbUmsService`: 카카오 알림톡 (`MessageCode.Channels.KAKAO_ALIMTALK`)
- `KjbEmailSendModule`: 이메일 (`MessageCode.Channels.EMAIL`)

## 로컬 개발 환경 (Windows)

테스트 시 `OsUtil.isWindows()` 조건으로 로컬 경로가 자동 설정됩니다:
- 발송 디렉토리: `c:\kjb-logs\sendmail\snd`
- 백업 디렉토리: `c:\kjb-logs\sendmail\bak`
- 에러 디렉토리: `c:\kjb-logs\sendmail\error`

URL이 빈 문자열로 설정되면 실제 API 호출 없이 모의 응답을 반환합니다.

## 기술 스택

- **Java 8**: Gradle toolchain 강제
- **Spring Framework 5.3**: 의존성 주입
- **Apache HttpClient 5.1**: HTTP 통신
- **Gson 2.3.1**: JSON 처리
- **Lombok 1.18.28**: 보일러플레이트 코드 생성
- **JUnit 5**: 테스트 프레임워크
- **Logback 1.2.10**: 로깅

## 패키지 구조

```
com.eactive.ext.kjb
├── common/              # 공통 (KjbProperty, 예외 클래스)
├── eai/                 # EAI 배치 연동
├── obp/                 # OBP API 연동
│   └── common/          # OBP HTTP 클라이언트
├── ums/                 # UMS/이메일 발송
│   └── gson/            # UMS 요청/응답 JSON 모델
└── utils/               # 유틸리티 (JSON, 검증, OS 판별)
```
