반응형

All 98

대용량 데이터 조회 시 ResultHandler(RowHandler)

Mybatis를 사용하여 대용량데이터를 select해서 List 형태로 호출 하게 되면 몇십만건 혹은 몇백만건 row data를 한번에 호출 하게 되면 OOM(Out of Memory)에러가 발생될 가능성이 매 우 높다. 보통, 엑셀 업로드, 다운로드 혹은 데이터 2차 가공 작업이 필요할때 위의 작업이 필요 한 경우가 발생 되는데, OOM오류를 회피하는 방법으로 Mybatis의 ResultHandler를 통해 데이터 Row별로 반복 작업이 가능하다. 아래의 소스를 통해 설명하자면, // DI SqlSessionFactory 주입 @Autowired private SqlSessionFactory sqlSessionFactory; ---생략--- // 대용량 다운로드 시 ResultHandler를 사용한 O..

Back/Mybatis 2020.02.19

CONNECT BY 뎁스구조 쿼리

트리구조, 뎁스구조에서 Full Path를 추출하는 쿼리를 오라클에서는 CONNECT BY를 사용하여 조회 할 수 있다. SELECT TC2.CD ,TC2.UP_CD ,TC2.CD_NM ,LTRIM (SYS_CONNECT_BY_PATH (TC2.CD_NM, '>'), '>') AS CD_NM_FULL FROM TB_CODE TC2 --START WITH TC2.CD = 'AB' START WITH TC2.CD IN('AA','AB','AC') CONNECT BY PRIOR TC2.CD = TC2.UP_CD 추가로, 고객사 요건으로 기존에 Full Path경로를 따로 담는 컬럼에 대해 추가 요청이 들어왔을때 기존에 등록되어 있는 데이터를 통해 Full Path값을 업데이트 해주는 쿼리는 아래와 같다. UP..

DB/Oracle 2020.02.14

Spring + Vue.js 세팅(1)

Spring boot(gradle) + vue.js 조합의 테스트 프로젝트를 진행하려고 한다. Spring boot 세팅 시 Spring Web과 Lombok만 추가 하여 가벼운 프로젝트로 생성 시켜준다. 그 이후 Vue.js 를 설치하는 과정은 아래와 같다. 1. Node 설치 https://nodejs.org/ko/download/ 다운로드 | Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. nodejs.org 2. vue-cli 설치 npm i -g @vue/cli 3. spring boot 프로젝트 경로 하위에 해당 vue프로젝트 설치 frontend라는 이름으로 vue프로젝트를 생성 시키기 앞서 np..

Front/Vue 2020.02.11

CHAR vs VARCHAR (VARCHAR2)

* CHAR vs VARCHAR (VARCHAR2)의 비교 문자의 경우 CHAR와 VARCHAR의 차이는 저장 영역과 문자열의 비교 방법이다. VARCHAR 유형은 가변 길이이므로 필요한 영역은 실제 데이터 크기뿐이다. 그렇기 때문에 길이가 다양한 컬럼과, 정의된 길이와 실제 데이터 길이에 차이가 있는 컬럼에 적합하다. 저장 측면에서도 CHAR 유형보다 작은 영역에 저장할 수 있으므로 장점이 있다. 비교 방법에서도 차이가 있다. CHAR 에서는 문자열을 비교할 때 공백을 채워서 비교하는 방법을 사용한다. CHAR(8) 이고 'AA'가 저장되어 있다면, 'AA' 뒤에 공백 6자리를 붙여 8자리로 비교하는 것이다. 따라서 'AA' = 'AA ' 은 실제로 'AA ' = 'AA ' 가 되어 같다는 결과가 나온..

DB/Etc 2020.02.04

Like검색할때 Text Index 생성시 유의사항

게시글 내용검색 등 blob, clob 타입의 like검색기능을 개발할때(검색엔진을 사용하지 않은경우), Text Index를 생성하여 해당 컬럼에 인뎅싱 작업을 할 수 있다. // CTXSYS 계정 해제 ALTER USER CTXSYS ACCOUNT UNLOCK ; // 권한 부여 GRANT CTXAPP TO DQDIC ; // 인덱스 생성 (parameter 데이터 변경 시 재적용 동기화 옵션) CREATE INDEX IDX_CONTAINS_DIC_SUBJECT ON DIC_SUBJECT(CONT) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('SYNC(ON COMMIT)'); SYNC(ON COMMIT) 파라미터를 통해 데이터가 변경 될때마다 바로 적용될 수 도 있지만 아..

DB/Oracle 2020.01.29

여러 행의 데이터를 하나의 컬럼데이터로 표현(LISTAGG,XMLAGG)

1) 문자열 조합 데이터 SIZE가 4000바이트 이하 일때 SELECT mtagWord.ID ,( SELECT LISTAGG(S1.SYNONYM_WORD, ',') WITHIN GROUP (ORDER BY S1.SYNONYM_WORD) FROM DS_MTAG_SYNONYM S1 WHERE S1.MTAG_WORD_ID = mtagWord.MTAG_WORD_ID ) AS SYNONYM_WORD FROM TEST mtagWord 2) 문자열 조합 데이터 SIZE가 4000바이트 이상 일때 (XML형태로 파싱 후 재작업) SELECT mtagWord.ID ,( SELECT RTRIM(XMLAGG(XMLELEMENT(S1,S1.SYNONYM_WORD||',') ORDER BY S1.SYNONYM_WORD).EX..

DB/Oracle 2020.01.29
반응형