[프로젝트] Spring batch의 적용
2023. 6. 6. 17:10
Spring
yata project에서 기한이 만료된 게시글을 일정 시간마다 한번에 처리해 줄 필요가 있었고, spring batch기능을 통해 일괄처리해주기로 결정하였다. 🔎스프링 배치(Spring Batch) 대량의 데이터를 처리하기 위한 일괄 처리(Batch Processing) 프레임워크 일괄 처리는 주기적으로 실행되며, 대부분의 작업은 큰 데이터 세트를 읽어 처리하고, 가공하여 결과를 저장하는 작업이다. 스프링 배치는 이러한 일괄 처리 작업을 효율적이고 안정적으로 처리하기 위한 다양한 기능과 구성 요소를 제공한다. 🔎스케줄링(Scheduling) 정해진 일정 또는 주기에 따라 작업을 실행하는 기능 주로 주기적으로 실행되는 반복 작업에 사용된다. 스프링 프레임워크에서는 @Scheduled 애너테이션을 사용하여..
Spring batch
2023. 6. 5. 15:25
Spring
스프링 배치란? 대용량 레코드 처리에 필수적인 기능을 제공 로깅/추적 트랜잭션 관리 작업 처리 통계 작업 재시작 건너뛰기 리소스 관리 등 또한 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공 🤔그렇다면 Spring Batch 와 Scheduler의 차이는 무엇일까? Spring Batch는 Batch Job을 관리하지만 Job을 구동하거나 실행시키는 기능은 지원하고 있지 않다. Spring에서 Batch Job을 실행시키기 위해서는 Quartz, Scheduler, Jenkins등 전용 Scheduler를 사용해야 한다. 🔎용어! Job 배치처리 과정을 하나의 단위로 만들어 놓은 객체 배치처리 과정에 있어 전체 계층 최상단에 위치 JobIns..
ehcache의 속성
2023. 6. 2. 18:54
Spring
💡ehcache의 주요 특징 Java의 대표적인 캐시 엔진 중의 하나로 경량의 빠른 캐시 엔진이다. 확장(scable) - 메모리 & 디스크 저장 지원, 멀티 CPU의 동시 접근에 튜닝 분산 지원 - 동기/비동기 복사, 피어(peer) 자동 발견 높은 품질 - Hibernate, Confluence, Spring 등에서 사용되고 있으며, Gaia 컴포넌트에서도 EHCache를 사용하여 캐시를 구현하였다. 💡설정 ehcache는 ehcache.xml파일을 설정 파일로 사용한다. 이 설정 파일은 캐시를 얼마만큼 보관할지, 얼마 동안 보관할지와 같은 캐시 정책을 정의하는 설정 파일이다. - defaultCache 태그 반드시 존재해야 하는 태그로서, 코드에서 캐시를 직접 생성할 때 사용되는 캐시의 기본 설정값..
[프로젝트] 2차 캐시의 적용/ 1차캐시와 2차캐시 차이
2023. 6. 1. 19:20
Spring
yata 프로젝트를 진행하며, 프로젝트 내 테이블과 연관관계가 많아지면서 데이터를 조회/검증 하는 데 많은 쿼리가 나가게 되었다. 또, 이러한 쿼리들이 많아지면서 데이터 베이스 서버의 네트워크 트래픽 증가의 문제가 있었습니다. 따라서 2차캐시를 도입하였다. 1차캐시와 2차캐시 네트워크를 통해 DB에 접근하는 시간 비용은 애플리케이션 서버에서 내부 메모리에 접근하는 비용보다 훨씬 비싸다. 따라서 조회한 데이터를 메모리에 캐시해서 DB접근횟수를 줄이는 것이 효율적이다. 영속성 컨텍스트 내부에는 엔티티를 보관하는 저장소가 있는데 이것을 1차캐시라 한다. 그러나 일반적 웹 애플리케이션 환경은 트랜잭션을 시작하고 종료할 때까지만 1차 캐시가 유효하다. 따라서 애플리케이션 전체로 보면 DB접근 횟수를 획기적으로 줄..
QueryDsl이란? 사용법+ 프젝 코드에 적용하기
2023. 5. 31. 19:45
Spring
QueryDsl이란? 정적 타입(컴파일 시 타입에 대한 정보를 결정)을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 오픈소스 프레임워크 왜쓰는가? JPA를 사용하다 보면 기본 기능으로 해결되지 않는 경우에는 네이티브 쿼리를 사용하게 된다. 그런데 네이티브 쿼리는 문자열을 이어 붙이기 떄문에 오타가 발생하기 쉽고 가독성이 떨어지는 단점이 있다. Querydsl을 사용하면 자동 완성과 같은 IDE의 기능을 사용할 수 있고, 컴파일 시점에 타입이나 문법 오류를 확인할 수 있다. 또한 동적 쿼리도 쉽게 사용할 수 있어서 편리하다. 물론 경우에 따라서 적용 필요성이 다를 수 있기 때문에 프로젝트의 특성에 따라서 적절하게 선택하자 😎장점 문자가 아닌 코드로 쿼리를 작성할 수 있어 컴파일 시점에 문법 오..
[프로젝트] N+1 문제와 QueryDsl
2023. 5. 31. 17:03
Spring
🔎문제 상황 yata프로젝트 중, 1:N 관계가 맺어져 있는 리뷰 전체조회, 게시글 전체조회 시 일대다 관계로 매핑된 테이블의 조회 쿼리까지 함께 날아가는 N+1문제가 발생하였다. 🔎원인 N+1 자체가 발생하는 이유는 한쪽 테이블만 조회하고 연결된 다른 테이블은 따로 조회하기 때문이다. 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 된다. 왜 이런 문제가 생기냐면,,, jpaRepository에 정의한 인터페이스 메서드를 실행하면 JPA는 메서드 이름을 분석해서 JPQL을 생성하여 실행하게 된다. JPQL은 SQL을 추상화한 객체지향 쿼리 언어로서 특정 SQL에 종속되지 않고 엔티티 객체와 필드 이름을 가지고 쿼리를 한다..
백준 1041 주사위
2023. 5. 4. 18:05
Algorithm
N에 수에 따른 규칙을 찾아보면 N=1일때는 1,2,3,4,5 면이 보이는 주사위 한개가 놓여지고 N>1일때는 3개 면이 보이는 주사위의 수 : 항상 4개 2개 면 보이는 주사위의 수 (n-1)*4+(n-2)*4 = 4(2n-3) = 8n-12개 1개 면 보이는 주사위의 수 4(n-2)(n-1)+(n-2)^2 = 5n^2 - 16n + 12 가 된다. 따라서 1개 면이 보일때는 정육면체 면중 가장 작은 값이 있는 면이 보여져야 하고 2개 면이 보이는 경우에는 '마주보고 있지 않은' 면 중 합이 가장 작은 두 면이 보여져야 하고 3개 면이 보이는 경우에는 한 모서리를 공유하는 주사위의 세 면의 합이 최소가 되어야 한다. 따라서 마주보는 면 3쌍의 최솟값을 각각 구한 후 더해주면 된다. 여기서 먼저 주의할 ..
백준 1663 -XYZ 문자열
2023. 5. 3. 18:32
Algorithm
CT대비 문제를 풀다가 관련 문제를 풀어봤다. 일단 규칙을 보니 dp[n] = dp[n-3] + dp[n-2] 가 되었고, dp풀면 되겠다고 생각했다. 이 점화식을 이용해 String객체 배열 안에 해당 순서의 String을 저장해 주는 방식으로 풀었다 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; //XYZ 문자열 public class Baek_1663 { static String[] dp; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new Input..
[Java] 이항계수 /백준 1010, 11051
2023. 5. 1. 02:26
Algorithm
문제 풀 때마다 까먹어서 이항계수를 정리해보려 한다. 이항계수 nCr 은 n개중 r개를 선택하는 경우의 수를 의미하며 n!/r!(n-r!)로 나타낼 수 있다 알고리즘에서 이항계수를 구할 때 팩토리얼로 일일히 이항계수를 구하면 int범위를 벗어나 오버플로우가 발생하는 경우가 많다. 따라서 BigInteger를 이용해줄 수 있지만 보통은 재귀를 이용한다. 재귀를 이용할 때에도 시간초과가 날 수 있기 때문에 dp로 풀어주는 것이 일반적이다. 이항계수에는 중요한 규칙 두 가지가 있다. 1.nCr = n-1Cr + n-1Cr-1 2.nC0 = nCn = 1 이를 증명해보자 {a1,a2,a3....an}의 부분집합 중 원소의 개수가 r인 것의 개수는 nCr이다 여기서 원소의 개수가 r인 경우는 두가지로 나뉠 수 있..