Files
djb-damo-manager/README.md
T
Rinjae 79d95ea185 - 기본 charset 을 UTF-8 로 변경
- DamoManager CHARSET 상수/javadoc 갱신
- README 내 charset 표기 동기화

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 14:11:52 +09:00

6.2 KiB

damo-manager

Penta scpdb 라이브러리 래퍼. 단일 jar (damo-manager.jar) 로 운영/로컬 양쪽 환경에서 동작한다.

  • 운영: 클래스패스에 com.penta.scpdb.ScpDbAgent 가 존재 → 실제 ScpEncB64 / ScpDecB64 / ScpHashB64 호출
  • 로컬 개발: scpdb 라이브러리 없음 → 자동으로 fake 모드 진입, 시작 시 System.err 에 강한 경고 배너 출력. 암복호화는 단순 Base64 round-trip, 해시는 JRE MessageDigest 로 대체

빌드

cd damo-manager
gradle clean build          # 또는 ./gradlew clean build (wrapper 추가 시)
ls build/libs/              # damo-manager.jar

JDK 8 toolchain 을 요구한다 (build.gradleJavaLanguageVersion.of(8)). JAVA_HOME 이 JDK 8 이거나 Gradle 이 시스템에서 JDK 8 을 auto-detect 할 수 있어야 한다.

Fake 모드 스모크 검증:

gradle runFakeSmoke

소스 코드 커스터마이즈

src/main/java/com/eactive/ext/djb/DamoManager.java 상단 상수 영역을 수정한다.

상수 의미 기본값
INI_FILE scpdb 에 전달할 ini 경로 /prod/damo/ba_scp/scpdb_agent.ini
KEY ScpEncB64/ScpDecB64 의 키 이름 KEY1
CHARSET scpdb 호출 시 charset 인자 UTF-8
SHA256, SHA512 해시 type 상수 71, 73

새 scpdb 메서드를 래핑하려면 다음 4 곳을 동기화한다.

  1. src/stub/java/com/penta/scpdb/ScpDbAgent.java — 새 시그니처를 추가 (컴파일 통과용)
  2. DamoManager.RealBridge — 실제 호출 메서드 추가
  3. DamoManager 공개 메서드 — if (REAL_MODE) bridge.xxx(...) else fakeXxx(...)
  4. fake 분기 로직 작성 (보통 Base64 또는 JRE 기능)

Stub 은 compileOnly 로만 사용되므로 산출 jar 에 포함되지 않는다. 운영의 진짜 ScpDbAgent 메서드 시그니처와 stub 시그니처가 다르면 운영에서 NoSuchMethodError 가 발생하므로 정확히 일치시켜야 한다.

결과물 사용 방법

권장: 빌드된 jar 직접 참조

타 Gradle 프로젝트에서는 damo-manager.jar 를 lib 폴더에 복사하여 직접 참조하는 방식을 권장한다. (Nexus 배포 없이 즉시 사용 가능)

Gradle:

dependencies {
    // 권장. 산출 jar 를 본인 프로젝트의 libs/ 에 복사 후 참조
    compileOnly files('libs/damo-manager.jar')
    // 또는 다른 위치를 직접 가리킨다면
    // compileOnly files('../damo-manager/build/libs/damo-manager.jar')
}

WAS lib 폴더에서 클래스를 로드하므로 의존성 scope 는 반드시 compileOnly (또는 Maven 의 provided) 로 둔다. implementation/api 로 두면 war 에 중복 포함되어 ClassLoader 충돌 위험.

api 로 다른 모듈에 노출이 필요하다면 동일하게 files(...)api scope 로 (단, 위 충돌 가능성 인지).

Maven:

<dependency>
    <groupId>com.eactive.ext.djb</groupId>
    <artifactId>damo-manager</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/libs/damo-manager.jar</systemPath>
</dependency>

또는 사내 Nexus 등에 배포 시 <scope>provided</scope>.

WAS (Tomcat) 설치

운영 / 로컬에 따라 lib 폴더 구성이 다르다.

운영 (Tomcat):

$CATALINA_HOME/lib/
├── damo-manager.jar
└── libs_scpdb-*.jar          ← penta scpdb 라이브러리 (실 암복호화)

libs_scpdb-*.jar 와 함께 네이티브 .so/.dll 및 /prod/damo/ba_scp/scpdb_agent.ini 도 준비되어 있어야 한다.

로컬 개발:

$CATALINA_HOME/lib/
└── damo-manager.jar          ← 단독. scpdb 라이브러리 없음

WAS 기동 시 콘솔(catalina.out 또는 stderr)에 다음과 같은 배너가 출력되면 정상 동작이다.

============================================================
  *** DAMO-MANAGER FAKE MODE ***
  com.penta.scpdb.ScpDbAgent NOT FOUND on classpath.
  Fallback:
    encrypt/decrypt -> Base64 (NO ENCRYPTION)
    hash            -> JRE MessageDigest (SHA-256 / SHA-512)
  *** DO NOT use this build for production! ***
============================================================

Fake 모드는 암호화가 전혀 없는 단순 Base64 통과 이므로 운영 절대 금지.

주요 메서드

import com.eactive.ext.djb.DamoManager;

DamoManager damo = new DamoManager();    // 클래스 로딩 시점에 모드 감지

String cipher = damo.encrypt("hello");                       // Base64 cipher text
String plain  = damo.decrypt(cipher);                        // → "hello"
String h256   = damo.hash(DamoManager.SHA256, "password");   // SHA-256 base64
String h512   = damo.hash(DamoManager.SHA512, "password");   // SHA-512 base64

boolean fake  = damo.isFakeMode();                           // 디버깅 / 분기용
int     rc    = damo.getReturnCode();                        // 0: 성공, -1: 실패
메서드 운영 동작 Fake 동작
String encrypt(String plain) ScpEncB64(INI_FILE, "KEY1", plain, "UTF-8") Base64.encode(plain.getBytes("UTF-8"))
String decrypt(String b64) ScpDecB64(INI_FILE, "KEY1", b64, "UTF-8") new String(Base64.decode(b64), "UTF-8")
String hash(int type, String src) ScpHashB64(type, src, "UTF-8") MessageDigest(SHA-256/512).digest(src) → Base64

해시 type 상수:

상수 알고리즘
DamoManager.SHA256 71 SHA-256
DamoManager.SHA512 73 SHA-512

기타 유틸 (원본 DamoManager 호환):

  • Base64Encode(byte[]), Base64Decode(String)
  • byteToHex(byte[]), byteArrayToHex(byte[])
  • checkHangul(char)
  • getReturnCode(), getRevision()

검증

스모크 main 이 포함되어 있다.

java -cp build/libs/damo-manager.jar com.eactive.ext.djb.DamoManager

또는:

gradle runFakeSmoke

예상 출력:

============================================================
  *** DAMO-MANAGER FAKE MODE ***
  ...
============================================================

revision = 20160503
fakeMode = true
encrypt    = aGVsbG8sIL3M3sCw
decrypt    = hello, 다모
roundtrip  = true
sha256 b64 = ... (len=44)
sha512 b64 = ... (len=88)