Skip to content

ljy1348/web-jdbc-driver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SsemDataSource

사내 웹 어드민 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 등)를 서버 전송 직전에 변조하고 결과를 받을 때 복원하여 정상적인 스키마 로드를 지원합니다.
  • 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를 프록시로 감싸 호출 서비스를 로깅합니다.

요구사항

  • Java 11+
  • Gradle

빌드 방법

./gradlew shadowJar

빌드 성공 시 build/libs/SsemDataSource-*-all.jar (Fat JAR) 파일이 생성됩니다.

DataGrip 연결 설정 방법

1. 드라이버(Driver) 등록

  1. DataGrip에서 FileData Sources+Driver를 선택합니다.
  2. Name: SsemDataSource (자유롭게 입력)
  3. Driver Files: 탭 하단의 + 버튼을 눌러 빌드된 SsemDataSource-*-all.jar 파일을 추가합니다.
  4. Class: com.ssem.data.SsemDataDriver를 선택합니다. (com.ssem.data.SsemMariaWrapperDriver는 마리아 디비 디버깅용 드라이버 입니다.)

2. 커넥션(Data Source) 생성

  1. FileData Sources+ → 등록한 SsemDataSource 드라이버를 선택합니다.
  2. 아래 정보를 입력합니다:
    • URL: jdbc:adminweb://your-admin-host/dbname 또는 https://your-admin-host/dbname
    • User: 사내 어드민 로그인 ID
    • Password: 사내 어드민 로그인 비밀번호

확장 및 커스터마이징

이 프로젝트는 코어 통신 모듈인 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()와 같은 별도의 파일 로거를 사용해야 합니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages