본문 바로가기

학습 일지129

JdbcTemplate batchUpdate로 벌크 insert하기 여러번의 단일 insert 질의를 통해 데이터를 저장하던 부분을 벌크 insert로 변경하여 한 번의 insert문으로 성능을 개선했던 이야기를 하고자 합니다. 원티드 채용공고를 스크래핑하는 배치 어플리케이션을 구축하고 있습니다.원티드에 채용공고에는 JD의 상세내용, JD에 포함된 기술스택 목록이 존재합니다.따라서 스크래핑한 채용공고 데이터를 1:N 관계로 이루어진 wanted_jd 테이블과 skill_history 테이블에 적재하고 있습니다.JD 상세 내용을 wanted_jd 테이블에 적재, 기술스택 목록은 skill_history 테이블에 적재@StepScope@Component@RequiredArgsConstructorpublic class WantedJdItemWriter implements It.. 2024. 3. 22.
@ConfigurationProperties으로 프로퍼티값 바인딩하기 SpringBoot 3.2.1 버전으로 진행한 내용입니다. 아래와 같은 properties 파일로 외부 URL을 관리하고 있다. @Value@Value 어노테이션을 사용하면 프로퍼티 파일의 값을 변수에 바인딩 할 수 있다. 하지만 @Value 어노테이션을 사용하면 final 키워드를 붙이지 못한다.@Value 어노테이션은 스프링에서 프로퍼티 파일의 값을 스프링 빈으로 등록하는데 스프링 컨텍스트가 시작될 때, 즉 런타임 시점에 프로퍼티 파일에 정의된 값들이 해당 변수에 바인딩 되기 때문에 컴파일 시점에서 final 키워드를 사용할 수 없다.따라서, @Value 어노테이션을 통해 바인딩 된 변수는 불변하게 관리할 수 없다는 치명적인 단점이 있다. @PropertySource@PropertySource 어노테.. 2024. 2. 7.
개념적인 튜닝용어 기초 용어오브젝트 스캔 유형테이블 스캔과 인덱스 스캔으로 구분테이블 스캔 : 인덱스를 거치지 않고 바로 디스크에 위치한 테이블 데이터에 접근테이블 풀 스캔인덱스 스캔 : 인덱스로 테이블 데이터에 접근인덱스 범위 스캔인덱스 풀 스캔인덱스 고유 스캔인덱스 루스 스캔인덱스 병합 스캔📈 테이블 풀 스캔인덱스를 거치지 않고 테이블에서 바로 처음부터 끝까지 훑는 방식WHERE 절의 조건문을 기준으로 활용할 인덱스가 없거나, 전체 데이터 대비 대량의 데이터가 필요할 때 수행된다.성능 측면에서는 부정적이다.인덱스 없이 사용하는 유일한 방식이다.📈 인덱스 범위 스캔인덱스 범위 기준으로 스캔한 뒤 테이블의 데이터를 찾아가는 방식SQL문에서 BETWEEN ~ AND 구문이나, , LIKE 구문 등 비교 연산 및 구문에 .. 2024. 1. 30.
논리적인 SQL 개념 용어 서브쿼리 위치에 따른 SQL 용어서브쿼리란 쿼리 안의 보조쿼리를 가르키는 용어다. 메인쿼리를 기준으로 내부에 서브쿼리가 어디에 위치하는지에 따라 부르는 용어가 달라진다.SELECT (SELECT ... FROM ...) -> SELECT 절 : 스칼라 서브쿼리FROM (SELECT ... FROM ...) -> FROM 절 : 인라인 뷰WHERE 컬럼명 IN (SELECT ... FROM ...) -> WHERE절 : 중첩 서브쿼리스칼라 서브쿼리서브쿼리가 반환하는 결과가 단일 값을 가지는 경우이다. 즉, 결과 값이 항상 1행 1열의 구조로 출력되어야 한다.메인쿼리 SELECT 절 목록이나 WHERE에 주로 사용된다.출력되는 데이터 건수가 1건이어야 하므로 집계함수가 자주 쓰인.. 2024. 1. 30.