근 2년간 일을 하면서 가장 많은 문제가 발생되는 부분은 아무래도 연동 쪽이 아닌가 하는 생각이 듭니다. 사용자 정보, 다른 페이지 호출, SSO 등 여러 연계 프로그램이 한 프로세스 안에 동작하거나 혹은 별도의 프로세스로 동작을 합니다.
금일 발생 되었던 문제는 사용자 정보를 가져오는 부분에 Oracle 데이터베이스에서 Select 하는 부분에 문제가 있어 사용자 데이터를 1행도 못 가지고 오는 문제가 발생 되었습니다.
제가 주로 사용하는 데이터베이스인 MySQL로 테스트를 해보면 원하는 결과값이 나오지만 오라클에서만 하면 결과값이 다릅니다.
문제의 원인은 Single Quotation 이었습니다.
1: Select * from user where userid is not null and userid != ‘’ ;
위의 문장은 단순하게 userid 칼럼의 값이 null 이 아니고 공백도 아닌 사용자를 가져오도록 하는 것입니다. (습관적으로 이렇게 사용을 합니다.)
복잡한 쿼리를 전송 하는게 아니기 때문에 해당 Query 문을 Oracle 에서 실행 했습니다.(단순하게 재연을 위해 가상의 테이블을 생성했습니다.)
1: CREATE TABLE TEST (
2: PHONE VARCHAR(10)
3: )
모든 데이터를 조회했습니다.
1: SELECT * FROM TEST;
입력되어 있는 데이터는 ‘1000’, null, ‘ ’ 입니다.
그러면 NULL이 아닌 데이터만 조회해보겠습니다.
1: SELECT * FROM TEST WHERE PHONE IS NOT NULL;
출력된 데이터는 아마 ‘1000’, ‘ ‘ 입니다.
그럼 문제의 Single Quotation 이 포함된 Query 를 요청하겠습니다.
1: SELECT COUNT(*) FROM TEST WHERE PHONE != ''
데이터가 없다고 나옵니다..-_-
해결책은 SingleQuotation 을 다른 SingleQuotation 으로 감싸는 방법입니다.
1: SELECT COUNT(*) FROM TEST WHERE PHONE != ‘''’
처음에 제한 원한 결과가 출력됩니다.