8월, 2026의 게시물 표시

prmt

너는 Java/Spring/MyBatis/JPA 기반 시스템의 배치 영향도 분석 담당자다. 목표는 현재 프로젝트에 존재하는 모든 배치를 조사하여, 배치들 사이의 선행/후행 의존성을 찾아내고 암호화 적용 시 영향을 받을 수 있는 흐름을 정리하는 것이다. 중요: 추측하지 말고 반드시 실제 소스 코드, 설정파일, SQL, 스케줄러 설정에서 확인된 근거만 사용하라. 다음 순서대로 분석하라. 1. 배치 목록 찾기 프로젝트 전체에서 배치로 실행될 가능성이 있는 코드를 검색하라. 다음을 모두 확인한다. * Spring Batch Job / Step * @Scheduled * Quartz * Java Timer / Scheduler * CommandLineRunner * ApplicationRunner * 배치용 main 클래스 * Shell에서 호출되는 Java 프로그램 * MyBatis Mapper를 호출하는 배치 Service * JPA Repository를 호출하는 배치 * DB Procedure / Function 호출 * 외부 인터페이스 수신 후 실행되는 프로그램 * application.yml * application.properties * XML 설정 * cron 표현식 * scheduler 관련 설정 발견한 배치마다 아래 정보를 기록한다. 배치ID: 배치명: 실행 클래스: 실행 메서드: 실행 방식: 실행 주기: 실행 시간: 호출 위치: 근거 파일: 근거 라인: 배치인지 확실하지 않으면 "배치 후보"라고 표시한다. 2. 각 배치의 DB 사용 분석 각 배치가 호출하는 Service → Mapper/Repository → SQL을 따라가라. 배치별로 다음을 찾는다. * SELECT 테이블 * INSERT 테이블 * UPDATE 테이블 * DELETE 테이블 * MERGE 테이블 * 호출 Procedure * 읽는 컬럼 * 저장하는 컬럼 특히 개인정보 또는 암호화 대상일 가능성이 있는 컬럼을 별도로 표시한다. 예: B...

타입핸들러 7

to_char(trunc(months_between(trunc(sysdate , 'DAY') , TO_DATE(birth , 'YYYYMMDD' ) ) / 12 )) AS YEARS 에 대한 package com.example.typehandler; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.sql.*; import java.time.LocalDate; import java.time.Period; import java.time.format.DateTimeFormatter; public class AgeTypeHandler extends BaseTypeHandler { private static final DateTimeFormatter BIRTH_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd"); @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, parameter); } @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { return calculateAge(rs.getString(columnName)); } @Override public String getNullableResult(ResultSet rs, int columnI...

ㅏ입핸들5

import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; /* * ResultMap usage example: * * * * * * * One-parameter parseable mixed column examples: * * SELECT * NVL(#{typeCode, jdbcType=VARCHAR}, '') * || '^|^' * || NVL(DECODE(OTS.SHOW_BIRTHDAY, 'N', '99991231', EMP.BIRTH_DATE_ENC), '') * || '^|^' * || NVL(EMP.HIRE_DATE, '') * || '^|^' * || NVL(TO_CHAR(SYSDATE, 'YYYYMMDD'), '') AS ATT_DETAIL_MIXED * , NVL(#{typeCode, jdbcType=VARCHAR}, '') * || '^|^' * || NVL(DECODE(OTS.SHOW_BIRTHDAY, 'N', '99991231', EMP.BIRTH_DATE_ENC), '') * || '^|^' * || NVL(EMP.HIRE_DATE, '') * ...

ext plg ctr sh 2 , ctr sh 6

import * as fs from 'fs/promises' import * as path from 'path' import * as vscode from 'vscode' type CryptoTarget = { tableName: string plainColumn: string cryptoType: string encColumn: string hashColumn: string javaProperty: string encryptTypeHandler: string hashTypeHandler: string } type ConvertRule = { before: string tobe: string tableMustExist: boolean } type ConvertPlaceholder = { key: string htype?: string camelHtype?: string } type ConvertCaptureResult = { captured: Map targets: CryptoTarget[] htypeCaptures: Array } type ResultMapEntry = { kind: 'id' | 'result' column: string property: string typeHandler?: string } type ResultMapDefinition = { id: string type: string entries: ResultMapEntry[] } type ResultMapAddition = { id: string entries: ResultMapEntry[] } type MapperItem = { tag: 'insert' | 'update' | 'select' | 'delete' id: string attrs...