Lang/JAVA(11)
-
[mybatis] XML 파싱 에러 발생
"The content of elements must consist of well-formed character data or markup."자바에서 DB 제어를 할때 많이 쓰이는 것중하나가 mybatis이다. xml을 쓸지 그냥 interface mapper로 해결할지는 선택이지만 xml 을 사용할 경우 위와 같은 에러를 볼 수 있다. xml도 html과 유사한 태그형 마크업 언어이기 때문에 sql 쿼리에서 쓰이는 기호들이 xml 파일 형식을 어긋나게 하는 경우가 있는데 이때 저런 에러가 발생한다. 주로 같은 부등호로 조건 연산을 할때 나오는 에러이다. 저 부등호가 xml상의 태그로 인식되기 때문에 에러가 발생하는 것이다. 이럴 때 해결방법은 주로 2가지가 있다. 1. 엔터티 문자 사용부등호나 다른..
2025.01.02 -
[SpringBoot] 대규모 데이터 처리 (1) - mysql insert
Big Data회사가 AI 회사다 보니 대규모 데이터 셋을 다룰 때가 종종 있다.이번엔 문서의 본문 내용이 포함된 대략 6만건의 데이터 셋을 insert 해야되는 mission 을 받았다. 한번에 insert 할 경우 여러 문제가 발생할 가능성이 있고 이 데이터를 처리하다가 다른 본 서비스에 지장을 줄 우려가 있었기에 local 환경에서 여러 시도를 해보고 그 결과를 남긴다. 1. Batch Insert대규모 데이터 셋을 넣어야할 프로젝트는 Mybatis를 사용중이었다.mySql은 foreach를 통해 다량의 row를 한번에 insert 할 수 있도록 지원하고 있기에 이것을 먼저 시도해봤다. 부하를 얼마나 버틸지 몰라 부분부분 나눠 테스트를 진행했다.처음은 100건을 요청했다 -> Success!!다음은..
2024.12.22 -
[SpringBoot] Spring Batch (2) - 설명 및 구현 예시
Spring BatchBatch를 처리하기 위해 Java 기반의 다양한 도구가 존재하지만 대부분 Spring Batch를 사용하는 이유는 아래와 같다 1. 대용량 데이터 처리에 적합- Spring Batch는 데이터를 청크 단위로 나눠 처리 하기 때문에 메모리 사용을 최소화한다.- 예외상황 발생시 체크 포인트에서부터 다시 실행할 수 있도록 지원한다. 2. 복잡한 배치 처리 시나리오 지원- 여러개의 Step을 조합하여 순차적 혹은 병렬적으로 실행 할 수 있으며 작업흐름을 제어하는 다양한 기능을 제공한다.- 조건부 흐름을 통해 특정 조건에 따라 다음 스텝이 어떻게 실행될지 정의 가능하다- Retry, Skip, 재시작 등 복구 전략도 쉽게 설정 할 수 있다. 3. 스케줄링 기능과의 연동- Spring Bat..
2024.10.07 -
[SpringBoot] Spring Batch (1) - Batch에 대해
Batch대량의 데이터를 정기적, 일괄적으로 처리하는 방식 특징1. 일괄 처리배치 작업은 실시간으로 처리되지 않고, 일정 시간 간격 또는 특정 조건에 따라 일괄적으로 대량의 작업을 한 번에 수행한다.ex) 하루 동안 쌓인 데이터를 야간에 한 번에 처리하는 것2. 대규모 데이터 또는 작업 처리배치 처리는 보통 대규모 데이터를 처리하거나 반복적인 작업을 수행하는 데 사용된다.ex) 수천 건의 데이터를 데이터베이스에 저장하거나, 대량의 파일을 변환하는 작업 등3. 자동화된 작업배치 작업은 일정 시간마다 자동으로 실행되거나, 특정 이벤트에 의해 트리거되어 자동화된 방식으로 처리ex) 매일 밤 00:00에 배치 작업이 실행되어 데이터를 처리하거나 백업하는 시스템4. 시간 지연 허용배치 처리 작업은 실시간 응답이..
2024.10.07 -
문자열 합치기 방식 비교 (concat VS "+" VS StringBuilder VS StringBuffer)
내가 작성한 로직중 "+"로 문자열을 합친 부분이 있었는데 코드 리뷰를 받던 중 +로 합치지말고 concat으로 합치라는 말을 들었다. 하지만 지적하신분이 "왜?" 라는 질문에 대답을 애매하게 "메모리 관리면에서 그게 좋다고 들었다"라고 하셔서직접 알아봤다. 1. concat()- String 클래스에서 기본 제공- 동작방식 : 합친 문자열을 String으로 재생성 ( -> 문자열을 추가할때마다 새로운 인스턴스가 할당되기에 성능, 속도 모두 좋지 않다.)- 사용시기 : 되도록 지양할 것!2. "+" 연산자- 동작방식 : JDK 1.5 미만 => 문자열 추가시 새 인스턴스에 할당 JDK 1.5 이후 => StringBuilder로 변환해서 처리 ( StringBuilder 객체 생성 ->..
2024.09.05 -
[GabageCollection] 가비지 컬렉션 알고리즘 종류와 구조
흔히 Java를 사용할 때의 장점을 말할 때 GC(GabageCollection)이 자주 나온다. 메모리 관리를 Java에 내장된 GC가 자동으로 해주면서개발자들이 일일이 메모리 관리에 시간을 쓸필요가 없기 때문이다. ( Java 이전의 언어들은 GC 같은 기능을 제공해주고 있지 않으나 파이썬이나 Node.js 계열 같이 자바 이후로 두각을 보이는 언어는 모두 자체적으로 메모리 관리 기능이 있다고 한다.) 오늘은 GC에 대한 정리를 하려한다. Gabage Collection GC(Gabage Collection)는 C언어 등에서 처럼 객체의 메모리를 직접 삭제해주는 로직이 없어도 자동으로 사용되지않는 객체에 할당된 메모리를 삭제해주는 역할을 한다. 여기서 메모리는 JVM의 힙(heap) 영역을 가리킨다...
2024.08.20