Java & Spring 33

QueryDSL

환경 : Spring 4.x, Java 21, H2 DB QueryDSL : JPA 환경에서 동적 쿼리 작성에 강한 라이브러리 이름이다. Spring Boot가 아닌 일반 Spring 환경(MVC, Legacy..) 에서는 MyBatis가 동적 쿼리에 강한 장점을 가지고 있어 별도 라이브러리 추가가 필요하지 않았다.Spring Boot 환경에서는 JPA Criteria 라는 것을 기반으로 동적 쿼리를 작성할 수 있지만 Criteria 자체가 가독성이 떨어지기 때문에 별도 외부 라이브러리로 QueryDSL을 사용하는 추세이다. QueryDSL 의존성 (build.gradle)dependencies { ... // QueryDSL dependency implementation 'co..

Java & Spring 2026.04.30

[Spring Data Jpa] 스프링 부트 페이징 처리

스프링 부트에서의 페이징 처리 Pageable : 사용자의 Http 페이징 요청 정보를 담는 인터페이스 (페이징 파라미터 정보)PageRequest : Pageable 구현체, 스프링 부트는 Http 요청에서 페이징 처리 관련 정보가 있을 때 PageRequest 객체를 생성하여 Pageable 타입으로 메서드에 바인딩한다.Page : Pageable 페이징 요청 정보를 통해 얻은 페이징 처리 결과물 // 1. Pageable 바인딩, Entity 반환@GetMapping("/members")public Page list(Pageable pageable) { Page page = memberRepository.findAll(pageable); return page;} /members?page=..

Java & Spring/JPA 2026.04.25

[Spring] Batch 입문 : 3시간 만에 끝내는 대용량 처리의 기초

https://www.inflearn.com/course/spring-batch-%EC%9E%85%EB%AC%B8-3%EC%8B%9C%EA%B0%84/dashboard?cid=340815 Spring Batch 입문: 3시간 만에 끝내는 대용량 처리의 기초| JSCODE 시니 - 인프런 강의현재 평점 5.0점 수강생 380명인 강의를 만나보세요. 스프링 배치를 처음 접하는 취준생과 현업 개발자를 위한, 실전에서 바로 써먹을 수 있는 '스프링 배치' 강의 입니다! '단순 삭제'부터 '대량www.inflearn.com해당 게시글은 위 강의를 수강한 뒤 작성하였습니다. STO 토큰 증권 프로젝트를 진행하며 배치 개념이 필요할 것 같아 위 강의를 수강했다.강의 시간이 긴 편이 아니라서 하루 ~ 이틀만에 배치..

Java & Spring/Batch 2026.04.19

[Spring] Batch : STO 토큰 상세 페이지 캔들 차트

프로젝트 진행 중 STO 토큰 상세 페이지에서 보여지는 '캔들 차트' 를 구현하는 역할을 담당하게 되었다. (주식과 유사하게 동작) 사용 기술 : Spring Boot 3, Spring Batch 5 아래는 상세 페이지의 목업이다. 화면 좌측 상단에 보이는 차트가 '캔들 차트' 라고 한다.캔들 차트에는- 단위 기간 동안 체결된 거래 가격 중 가장 높은 가격을 의미하는 '고가',- 단위 기간 동안 체결된 거래 가격 중 가장 낮은 가격을 의미하는 '저가',- 단위 기간 중 처음으로 체결된 가격을 의미하는 '시가'- 단위 기간 중 마지막으로 체결된 가격을 의미하는 '종가' 가 보여진다. 캔들차트 개념https://kbthink.com/stock/chart.html 캔들차트 보는 법|주식 초보를 위한 캔들차..

Java & Spring/Batch 2026.04.07

[Spring] JPA 6

다중성 N:1 - 실무에서 권장, N에 외래키가 있다.1:N - 실무에서 권장하지 않는 방식, 1에 외래키가 있다.1:1 - 어느 곳이나 외래키를 가질 수 있다.N:M 연관관계의 주인 : 두 객체의 연관관계 중 하나를 정해서 데이터베이스의 외래키를 관리 일반적으로 다(M, many) 방향에서 외래키를 가지고 있는 것이 효율적이기 때문에 Many 방향을 연관관계의 주인으로 선택한다.연관관계의 주인이 아닌 클래스 (1, one)는 외래키를 변경 불가, 읽기만 가능Team : Member = 1 : N외래키는 N인 Member가 team_id 컬럼을 가진다.외래키를 가진 방향을 연관관계의 주인으로 지정해두는 것이 효율적이며Member class가 외래키를 가지고 있기 때문에 연관관계의 주인이다.연관관계의 주인..

Java & Spring 2026.03.16

[Spring] JPA 5

연관 관계 연관 관계 - 단방향 매핑- 양방향 매핑 연관 관계의 주인 : 객체 간 양방향 매핑 시 연관 관계를 관리하는 주체 다중성 : N:1, 1:N, 1:1, N:M DB 테이블에서의 연관관계는 외래키 개념이 있어 항상 양방향이 된다.두 테이블을 서로 참조하기 위해서는 외래키를 이용해 JOIN으로 엮으면 된다. 객체 테이블테이블은 '외래 키'로 조인을 사용해서 연관된 테이블을 찾는다.객체는 '참조'를 이용해 연관된 객체를 찾는다. SELECT ...FROM TEAM t JOIN MEMBER m ON t.member_id = m.member_id객체와 클래스에서의 연관관계는 외래키 개념이 없으며 참조 필드를 이용해 관계를 생성할 수 있다.Team : Member = 1:NTeam 클래스에 Li..

Java & Spring/JPA 2026.03.03

[Java] Map 정렬

Map에서 Key 정렬은 TreeMap을 사용하면 된다. Map map = new TreeMap();map.put(3, "kim");map.put(1, "lee");map.put(2, "choi");// key가 1, 2, 3으로 자동 정렬된다. 내림차순 정렬 시 Collections.reverseOrder()을 넣으면 된다.Map map = new TreeMap(Collections.reverseOrder());map.put(3, "kim");map.put(1, "lee");map.put(2, "choi");// key가 3, 2, 1 순서로 자동 정렬된다. TreeMap에서 자주 사용되는 메서드TreeMap map = new TreeMap();map.put(1, "Data1");map.put(2, "..

Java & Spring 2026.03.03

[Spring] 웹소켓/Stomp 8

다중 서버에서의 Redis Pub & Sub 다중 서버 상황에서 서버 메모리에 의존적인 기능들은 대부분 문제가 생길 가능성이 크다. 문제A 서버와 B 서버가 있을 때 클라이언트1과 2가 실시간 채팅하는 상황에서 1은 A 서버에 발행, 2는 B 서버를 구독하게 되면A 서버는 클라이언트 2에 대한 정보를 알고 있지 않기 때문에 실시간 채팅 기능이 정상적으로 동작하지 않는다. 해결 - 서드 파티 솔루션으로 Redis Pub Sub 기능 사용 주로 Redis 또는 Kafka를 사용Redis는 pub sub 기능 외에도 캐싱, 리프레시 토큰 관리 등 여러 역할을 많이 수행한다. Redis Pub Sub : Redis가 제공하는 메시징 기능 - 실시간 통신에서 메시지를 전파해주는 목적으로 사용한다.- Redis..

[Spring] Batch 6

Job Listener- 배치 작업은 백그라운드에서 수행된다.- 리스너는 배치의 주요 시점들을 감지하는 역할을 담당한다. - 배치 모니터링- 배치 시작, 성공 여부, 종료 시점, 알림 발송, 데이터 초기화 .. - Job Listener 클래스는 스프링 빈으로 등록되어야 한다. (@Component) Job Execution Listener - Job 실행의 시작, 종료 시점에 호출되는 리스너- beforeJob : Job 시작 전 필요한 리소스를 준비 등 초기화 작업 수행- afterJob : Job 종료 직후 리소스를 정리하는 등 후처리 작업 (email 전송, Job 상태 변경 ..) 수행 Step Execution Listener - Step 실행의 시작, 종료 시점에 호출되는 리스너- befor..

Java & Spring/Batch 2026.02.26

[Spring] Batch 5

Job Parameter- 배치 작업을 실행할 때 외부에서 주입하는 파라미터 묶음 LocalDate targetDate = LocalDate.of(2026, 1, 26);deleteLogs(targetDate); Job Parameter 사용 x :- 위의 2026, 1, 26 처럼 값을 매 번 수동으로 변경, 재배포해야 한다.- 동적으로 변하는 값들에 대해 다루기 힘들다. Job Parameter 을 이용해 동적인 값들을 터미널 명령어 입력 시 주입할 수 있다.- 배치 작업 실행 시점에서 동적 데이터 주입 => 매 번 프로젝트 수정이 일어나지 않는다. ./gradlew bootRun --args='--spring.batch.job.name=myJob requestDate=20260225' Job Par..

Java & Spring/Batch 2026.02.25