퇴근5분전

 

오늘부터 드디어 자바로 된 프로젝트에 코딩을 시작했다. 

3주간 소스코드 분석하면서 내 프로젝트 툴 관련 소스들 정비하면서도... 

9년만에? 하는 자바프로젝트라 걱정이 되긴 했는데... 

막상 시작하고 삽질로 시작해서 희망이 보였다. 

 

 이클립스에서 톰캣 디버깅 모드에서 수정하고 자동빌드모드로 두니까 좀 기다리니 재배포를 기다리면 알아서 되더랑.. 

VS처럼 빠르진 않지만.. 느릿 느릿... 해도 되는게 어디냥...  어제까지만 해도 안되는것 같아서 포기했는데... 

그래서 소스 수정하면 톰캣 다시 올리곤 했는데... 오늘 몇가지 설정 바꾸니 되더랑 ㅠㅠ;

 

 그간 말썽 부리던 로그 남기는 것도... 추가한 로그도 잘 쌓이고 보이면서... 위에 설명하듯이 톰캣에 자동빌드되어 배포되니까... 느릿 느릿해도... 귀찮은 짓은 안해도 될 것 같았다. 

 

 퇴근전에 확인하다가 걸리는게 하나... 

db 로그를 보다가 하나 실행하려니까 파라미터가 20여개? 즘 되는 쿼리...가 돌았는데...

로그가 가관이었음 ㅠㅠ;

 

쿼리 ~~~~~~~~~~~~ 엄청 길고... 중간 중간 파라미터로 '?' 로 위치 박혀있고... 

별도로 아래라인에 파라미터가 [ x, xx, xxx, ... ] 이렇게 있는 거 보고.. 헉...... 

 일단 순차적으로 손으로 일일이 바꿔서 보고... 쿼리를 돌려서 결과 확인을 했다. 

안그래도 문서도 없는 깜깜이 플젝인데... 쿼리도 쉽게 못돌리면... ?

 

오라클은 프로파일러 거는게... ms같지 않으니... 포기하고... 문자열 치환하자!!!

/////////////////////////////////// 변환 소스 ////////////////////////////////////////

string qry = @"
    -- ?가 박혀있는 로그에 기록된 쿼리 문장.
";

            // 이건 파라미터... n개~
            string strPrms = "AAAA, BBBB, CCCC, DDD, EEEEE, FFFFF, GGGGG";
            string[] prms = strPrms.Split(',');             
            string result = qry;             

            // 생각나는 ? 주변에 있어도 될 문자들..
            string[] validString = new string[] { "", ",", " ", "\n", "\r", "(", ")" }; 

            int index = 0;
            for (int loop = 0; loop < prms.Length; loop++)
            {
                string x = prms[loop];
                int idx = -1;
                do
                {
                    idx = result.IndexOf('?', index );
                    if (0 < idx && idx < result.Length)
                    {
                        if (result[idx] == '?')
                        {
                            //앞, 뒤 체크
                            string pre = $"{result[idx - 1]}";
                            string next = "";
                            if (idx < (result.Length - 1))
                            {
                                next = $"{result[idx + 1]}";
                            }

                            if (validString.Contains(pre) && validString.Contains(next))
                            {
                                result = result.Remove(idx, "?".Length);
                                result = result.Insert(idx, x);
                                index += x.Length;
                                break;
                            }
                        }
                        index = idx + 1;
                    }
                    else
                    {
                        break;
                    }
                }
                while (0 < idx && idx < result.Length);
            }

 

최종적으로 result는 ?와 파라미터가 치환된 쿼리!!!

특별한 예외 없이 잘 된다. 내일 쿼리 스냅샷 프로젝트에 변환 툴로 넣어놔야겠다.

 

-------------- 추가 -------------

로그 검색 프로그램쪽으로 별도 팝업으로 만들어놨다. 

 

쿼리를 돌리면 문자열에 홀따옴표가 없는 채로 들어가니까 에러가 날때가 있는데 

우선은 그때 찾아서 홀따옴표 넣어주는걸로 생각하면서 사용하면 된다.