본문 바로가기

학습 일지130

[Java] 제네릭과 가변인자 조합 메서드의 @SafeVarargs 어노테이션 @SafeVarargs 어노테이션을 이해하기 위해선 가변인자와 제네릭의 조합을 알아야한다. 가변인자를 사용하면, 메서드를 호출할 때 매개변수의 개수를 자유롭게 넣을 수 있고 해당 값들이 담겨 있는 배열이 생성된다.public static int sum(int... nums) { return Arrays.stream(nums).sum();}int... 로 받은 정수형 타입의 매개변수의 합을 반환하는 기본적인 예시그렇다면 만약 제네릭 함수에서 가변인자를 사용하면 어떻게 될까? 아래에 List를 여러개 받아 모두 하나의 List로 합쳐주는 flatten 메서드가 있다.public static List flatten(List... lists) { List result = ne.. 2024. 4. 24.
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.