NH 저축은행 IFRS 차세대 프로젝트를 진행하던 중 주석을 한땀한땀 달기가 너무 어려워
회사 프레임워크에는 이미 있는 기능이였던 주석생성기가 필요했지만 해당 프레임워크를 사용하지 않는
시스템이라 주석생성기를 임시로 구현을 할 필요가 있어 작성하게되었다
원래 Spring기반의 사내 프레임워크였다면 service에서 직접적으로 select한 주석 결과를 DTO에 담아 전달 할 수 있지만
이곳은 전문(fs)를 사용하는 방식이라 화면에 hidden 형태의 input을 길이를 크게하여 숨겨놓고 그곳에 값을 셋팅하여
그 값을 읽어오는 것으로 구현이 가능했다
<js>
function comments(conv){
var arrCmmJson = $.f("COMMENTS_AREA1").value();
arrCmmJson = arrCmmJson.toUpperCase();
arrCmmJson = JSON.parse(arrCmmJson);
var comments = {};
//json 형태의 key-comments 구조로 생성
for(cmm in arrCmmJson){
if(conv.contains("convP")){
comments[arrCmmJson[cmm].NM] = arrCmmJson[cmm].CD;
}
else{
comments[arrCmmJson[cmm].CD] = arrCmmJson[cmm].NM;
}
}
//주석생성이 필요한 쿼리
var t1 = $.f("TEXTAREA").value();
var arr_t = t1.split("\n");
var maxLength = 0;
var return_t = "";
var temp_t = "";
//쿼리 정제
for(var i in arr_t){
// /**/주석제거
arr_t[i] = arr_t[i].replace(/\/\*[^\+].+?\*\//gi,"");
// --주석제거
arr_t[i] = arrt[i].replace(/\-\-[^\+]+\S*/gi,"");
//끝 space 제거
arr_t[i] = arr_t[i].replace(/\s+%$/,"");
//탭 -> space4자리로 치환
arr_t[i] = arr_t[i].replace(/\t/gi," ");
//대문자 변환
arr_t[i] = arr_t[i].toUpperCase();
//max길이 계산
if(maxLength < arr_t[i].lnegth) maxLength = arr_t[i].length;
}//end for
for(var i in arr_t){
//특수문자 space로 치환
var reg = /[`~!@#$%^&*()|+\-=?;:'",.<>\{\}\[\]\\\/]/gim;
temp_t = arr_t[i].replace(reg , " ");
//테이블 namespace로 . 찍힌것 space로 치환
temp_t = temp_t.replace(/[A-Z]+\./gi," ");
//space여러개 제거
temp_t = temp_t.replace(/\s+/gi," ");
//space 기준으로 단어 추출
temp_t = temp_t.split(/\s/gi);
var addComm = [];
//단어for
for(var i_t in temp_t){
if(typeof comments[temp_t[i_t]] != "undefined"){
if(conv.contains("conv")){
arr_t[i = arr_t[i].replace(temp_t[i_t], comments[temp_t[i_t]]);
}
else{
if(addComm.indexOf(comments[temp_t[i_t]]) < 0){
addComm.push(comments[temp_t[i_t]]);
}
}
}
}
//json형태의 단어 : 코멘트 존재여부 판단
if(addComm.length > 0){
//줄 끝 space추가
arr_t[i] = fn_leadingSpace(arr_t[i],maxLength);
//코멘트 추가
var comm = "/* " + addComm.join(", ") + " */";
arr_t[i] += comm;
}
return_t += arr_t[i] + "\n";
$.f("TEXTAREA_RESULT").value(return_t);
}
function fn_leadingSpace(rowText, maxLength){
var defaultLength = 100;
var digits = maxLength;
if(digits < defaultLength) digits = defaultLength;
else digits = digits + 12;
var space = '';
rowText = rowText.toString();
var rowLength = rowText.bytelength();
if(rwoLength < digigts){
for(var i = 0 ; i < digits -rowLength ; i++){
space += ' ';
}
}
return rowText + space;
}
<SQL>
SELECT CD
, NM
FROM (
SELECT A.TABLE_NAME AS CD
, B.COMMENTS AS NM
FROM ALL_TABLE A
, ALL_TAB_COMMENTS B
WHERE A.OWNER in ('DEV~~' , 'LOMAD~~', 'IFRA~~') --OWNER
AND A.OWNER = B.OWNER
AND A.TABLE_NAME = B.TABLE_NAME
AND B.COMMENTS IS NOT NULL
UNION ALL
SELECT DISTINCT
COLUMN_NAME AS CD
, COMMENTS AS NM
FROM ALL_COL_COMMENTS
WHERE OWNER in ('IFRADMD')
AND COMMENTS IS NOT NULL
UNION ALL
SELECT DISTINCT
COLUMN_NAME AS CD
, COMMENTS AS NM
FROM ALL_COL_COMMENTS X
WHERE OWNER in ('LOM~~', 'DEV~~')
AND COMMENTS IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM ALL_COL_COMMENTS Y
WHERE Y.OWNER in ('IFRA~')
AND X.COLUMN_NAME = Y.COLUMN_NAME
)
)
ORDER BY CD DESC
'기록' 카테고리의 다른 글
나는 어떻게 이런 장점을 가지게 되었지? - 인생지도 (6) | 2024.09.21 |
---|---|
F-lab 자바 백엔드 6개월 수료 후기 (1) | 2023.10.15 |
[ksh] 쉘 스크립트(Shell Script)와 파워쉘 스크립트(PowerShell Script)로 수정된 파일 찾아 복사하기 (1) | 2023.01.04 |
NH 저축은행 IFRS 차세대 프로젝트를 진행하던 중 주석을 한땀한땀 달기가 너무 어려워
회사 프레임워크에는 이미 있는 기능이였던 주석생성기가 필요했지만 해당 프레임워크를 사용하지 않는
시스템이라 주석생성기를 임시로 구현을 할 필요가 있어 작성하게되었다
원래 Spring기반의 사내 프레임워크였다면 service에서 직접적으로 select한 주석 결과를 DTO에 담아 전달 할 수 있지만
이곳은 전문(fs)를 사용하는 방식이라 화면에 hidden 형태의 input을 길이를 크게하여 숨겨놓고 그곳에 값을 셋팅하여
그 값을 읽어오는 것으로 구현이 가능했다
<js>
function comments(conv){
var arrCmmJson = $.f("COMMENTS_AREA1").value();
arrCmmJson = arrCmmJson.toUpperCase();
arrCmmJson = JSON.parse(arrCmmJson);
var comments = {};
//json 형태의 key-comments 구조로 생성
for(cmm in arrCmmJson){
if(conv.contains("convP")){
comments[arrCmmJson[cmm].NM] = arrCmmJson[cmm].CD;
}
else{
comments[arrCmmJson[cmm].CD] = arrCmmJson[cmm].NM;
}
}
//주석생성이 필요한 쿼리
var t1 = $.f("TEXTAREA").value();
var arr_t = t1.split("\n");
var maxLength = 0;
var return_t = "";
var temp_t = "";
//쿼리 정제
for(var i in arr_t){
// /**/주석제거
arr_t[i] = arr_t[i].replace(/\/\*[^\+].+?\*\//gi,"");
// --주석제거
arr_t[i] = arrt[i].replace(/\-\-[^\+]+\S*/gi,"");
//끝 space 제거
arr_t[i] = arr_t[i].replace(/\s+%$/,"");
//탭 -> space4자리로 치환
arr_t[i] = arr_t[i].replace(/\t/gi," ");
//대문자 변환
arr_t[i] = arr_t[i].toUpperCase();
//max길이 계산
if(maxLength < arr_t[i].lnegth) maxLength = arr_t[i].length;
}//end for
for(var i in arr_t){
//특수문자 space로 치환
var reg = /[`~!@#$%^&*()|+\-=?;:'",.<>\{\}\[\]\\\/]/gim;
temp_t = arr_t[i].replace(reg , " ");
//테이블 namespace로 . 찍힌것 space로 치환
temp_t = temp_t.replace(/[A-Z]+\./gi," ");
//space여러개 제거
temp_t = temp_t.replace(/\s+/gi," ");
//space 기준으로 단어 추출
temp_t = temp_t.split(/\s/gi);
var addComm = [];
//단어for
for(var i_t in temp_t){
if(typeof comments[temp_t[i_t]] != "undefined"){
if(conv.contains("conv")){
arr_t[i = arr_t[i].replace(temp_t[i_t], comments[temp_t[i_t]]);
}
else{
if(addComm.indexOf(comments[temp_t[i_t]]) < 0){
addComm.push(comments[temp_t[i_t]]);
}
}
}
}
//json형태의 단어 : 코멘트 존재여부 판단
if(addComm.length > 0){
//줄 끝 space추가
arr_t[i] = fn_leadingSpace(arr_t[i],maxLength);
//코멘트 추가
var comm = "/* " + addComm.join(", ") + " */";
arr_t[i] += comm;
}
return_t += arr_t[i] + "\n";
$.f("TEXTAREA_RESULT").value(return_t);
}
function fn_leadingSpace(rowText, maxLength){
var defaultLength = 100;
var digits = maxLength;
if(digits < defaultLength) digits = defaultLength;
else digits = digits + 12;
var space = '';
rowText = rowText.toString();
var rowLength = rowText.bytelength();
if(rwoLength < digigts){
for(var i = 0 ; i < digits -rowLength ; i++){
space += ' ';
}
}
return rowText + space;
}
<SQL>
SELECT CD
, NM
FROM (
SELECT A.TABLE_NAME AS CD
, B.COMMENTS AS NM
FROM ALL_TABLE A
, ALL_TAB_COMMENTS B
WHERE A.OWNER in ('DEV~~' , 'LOMAD~~', 'IFRA~~') --OWNER
AND A.OWNER = B.OWNER
AND A.TABLE_NAME = B.TABLE_NAME
AND B.COMMENTS IS NOT NULL
UNION ALL
SELECT DISTINCT
COLUMN_NAME AS CD
, COMMENTS AS NM
FROM ALL_COL_COMMENTS
WHERE OWNER in ('IFRADMD')
AND COMMENTS IS NOT NULL
UNION ALL
SELECT DISTINCT
COLUMN_NAME AS CD
, COMMENTS AS NM
FROM ALL_COL_COMMENTS X
WHERE OWNER in ('LOM~~', 'DEV~~')
AND COMMENTS IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM ALL_COL_COMMENTS Y
WHERE Y.OWNER in ('IFRA~')
AND X.COLUMN_NAME = Y.COLUMN_NAME
)
)
ORDER BY CD DESC
'기록' 카테고리의 다른 글
나는 어떻게 이런 장점을 가지게 되었지? - 인생지도 (6) | 2024.09.21 |
---|---|
F-lab 자바 백엔드 6개월 수료 후기 (1) | 2023.10.15 |
[ksh] 쉘 스크립트(Shell Script)와 파워쉘 스크립트(PowerShell Script)로 수정된 파일 찾아 복사하기 (1) | 2023.01.04 |