사내 웹 어드민 API를 DataGrip 등의 DB 클라이언트에서 직접 SQL로 조회하고 제어할 수 있도록 도와주는 커스텀 JDBC 드라이버입니다. 실제 DB 소켓 연결 없이 HTTP를 통해 사내 API를 호출하여 JDBC 인터페이스를 구현합니다.
- JDBC 표준 인터페이스 구현: Driver, Connection, Statement, PreparedStatement, ResultSet 등을 모사하여 동작합니다.
- DataGrip 완벽 호환:
DatabaseMetaData를 MariaDB(10.6.0)로 위장하여 DataGrip의 스키마 파서(Introspection)가 정상 동작하도록 지원합니다.information_schema시스템 쿼리를 가로채어 테이블 및 컬럼 정보를 자동으로 매핑합니다.
- WAF(웹 방화벽) 우회 지원:
- DataGrip이 자동 생성하는 쿼리 중 방화벽에 걸리는 금지어(
create_options,delete_rule,update_rule등)를 서버 전송 직전에 변조하고 결과를 받을 때 복원하여 정상적인 스키마 로드를 지원합니다.
- DataGrip이 자동 생성하는 쿼리 중 방화벽에 걸리는 금지어(
- DML 및 DDL 쿼리 전송 지원:
SELECT등 조회 쿼리뿐만 아니라INSERT,UPDATE,DELETE등의 변경 쿼리도 정상적으로 서버에 전송하고 처리 결과를 반환합니다.
- 대용량 데이터 로드:
- 페이지네이션(
OFFSET,LIMIT) 자동 처리 로직이 내장되어 있어 1000건 이상의 데이터도 문제없이 가져옵니다.
- 페이지네이션(
- Unix Timestamp 자동 변환:
- 컬럼명이
dtm,_dt,date,_at으로 끝나는 숫자형 데이터(10자리 또는 13자리)를 자동으로yyyy-MM-dd HH:mm:ss포맷으로 변환해 줍니다.
- 컬럼명이
- 디버깅 프록시 드라이버 지원:
- DataGrip이 백그라운드에서 호출하는 JDBC 메서드들을 추적할 수 있도록
SsemMariaWrapperDriver를 제공합니다. mariadb connector를 프록시로 감싸 호출 서비스를 로깅합니다.
- DataGrip이 백그라운드에서 호출하는 JDBC 메서드들을 추적할 수 있도록
- Java 11+
- Gradle
./gradlew shadowJar빌드 성공 시 build/libs/SsemDataSource-*-all.jar (Fat JAR) 파일이 생성됩니다.
- DataGrip에서
File→Data Sources→+→Driver를 선택합니다. - Name:
SsemDataSource(자유롭게 입력) - Driver Files: 탭 하단의
+버튼을 눌러 빌드된SsemDataSource-*-all.jar파일을 추가합니다. - Class:
com.ssem.data.SsemDataDriver를 선택합니다. (com.ssem.data.SsemMariaWrapperDriver는 마리아 디비 디버깅용 드라이버 입니다.)
File→Data Sources→+→ 등록한SsemDataSource드라이버를 선택합니다.- 아래 정보를 입력합니다:
- URL:
jdbc:adminweb://your-admin-host/dbname또는https://your-admin-host/dbname - User: 사내 어드민 로그인 ID
- Password: 사내 어드민 로그인 비밀번호
- URL:
이 프로젝트는 코어 통신 모듈인 AdminClient 인터페이스를 분리하여 설계되었습니다. 타 시스템과 연동이 필요할 경우 아래 인터페이스를 직접 구현하여 통신 레이어를 교체할 수 있습니다.
public interface AdminClient {
// 사용 가능한 스키마(데이터베이스) 목록 반환
List<String> getSchemas();
// 실제 쿼리 전송 (일반 SELECT / DML 등)
List<Map<String, Object>> sendQuery(String target, String query);
// 메타데이터 쿼리 전송 (테이블, 컬럼 목록 등)
List<Map<String, Object>> getMetaData(String target, String query);
}- 출력(Stdout) 사용 금지: DataGrip은 드라이버와 RMI 프로토콜을 통해 통신하므로, 내부 코드에서
System.out.println()을 사용할 경우 통신 스트림이 오염되어 에러가 발생할 수 있습니다. 로깅은Log.d()와 같은 별도의 파일 로거를 사용해야 합니다.