2026. 4. 6. 17:26ㆍ대우개발원 수업 내용/spring boot, framework
Spring Data JPA 기본 및 CRUD
반복적인 SQL 작성 없이, 인터페이스 상속만으로 데이터베이스를 다루는 핵심 기술
레포지토리(Repository) 생성
- 방법: extends JpaRepository\<엔티티, PK타입\>
- 특징: JPA의 기본 기능(CRUD, 페이징 등)을 그대로 물려받아 바로 사용 가능
- 테이블 자동 생성: @Entity 클래스와 application.properties의 ddl-auto 설정을 통해
DB 테이블을 직접 SQL로 만들지 않아도 자동 생성됨
기본 CRUD 메서드
- Insert: testInsert() / boardRepository.save(board) / PK(bno)가 없는 새 객체면 INSERT 실행
- Select: testSelect() / boardRepository.findById(bno) / 데이터 조회 시 Optional로 감싸서 반환
- Update: testUpdate() / board.change(...) 후 boardRepository.save(board) / PK가 이미 존재하면 자동으로 UPDATE 처리
- Delete: testDelete() / boardRepository.deleteById(bno) / PK 기준으로 해당 레코드 삭제
Optional 이란?
NullPointerException을 방지하는 Wrapper 클래스
- orElseThrow(): 값이 없으면 예외 발생 (가장 많이 사용)
- orElse(null): 값이 없으면 null 반환
- isPresent(): 값 존재 여부 (true/false)
-----
페이징 (Paging) 처리
전체 데이터가 아닌, 필요한 만큼의 데이터를 페이지 단위로 나눠서 조회하는 기능
핵심 인터페이스 및 클래스
- Pageable: 페이징 정보를 담는 인터페이스
- PageRequest: Pageable을 구현한 실제 객체. PageRequest.of(페이지번호, 데이터개수, 정렬조건) 형태로 사용
(페이지 번호는 0부터 시작)
조회 결과 (Page\<Board\>)
- etTotalElements(): 전체 데이터 개수
- getTotalPages(): 전체 페이지 수
- getNumber() / getSize(): 현재 페이지 번호 / 페이지당 크기
- getContent(): 실제 조회된 데이터 리스트 (List\<Board\>) 반환
-----
QueryDSL (동적 쿼리 프레임워크)
Spring Data JPA만으로는 복잡한 조건이나 동적 쿼리(검색 조건에 따라 쿼리가 바뀌는 것)를 처리하기 어렵기 때문에 도입
QueryDSL의 장점
1. 컴파일 시점 오류 확인: 문자열(SQL)이 아닌 자바 코드로 작성하여 문법 오류를 실행 전에 파악
2. IDE 자동완성: 인텔리제이 등 자동완성 지원
3. 동적 쿼리 작성의 편리함: 복잡한 if문 조건을 BooleanBuilder 등으로 깔끔하게 처리
QueryDSL 구현 핵심 구조 (중요)
QueryDSL 적용을 위한 3단계 구조
1. 사용자 정의 인터페이스 (BoardSearch)
- 사용할 검색 메서드 선언 (예: search1, searchAll)
2. 구현 클래스 (BoardSearchImpl)
- QuerydslRepositorySupport 상속 및 BoardSearch 구현(implements)
- Q클래스(QBoard)를 사용하여 실제 쿼리 로직을 자바 코드로 작성
3. 기존 레포지토리에 상속 (BoardRepository)
- 기존 JpaRepository와 함께 생성한 BoardSearch 인터페이스 다중 상속
검색 로직 분석 (searchAll 메서드)
- JPQLQuery\<Board\> query = from(board): 쿼리 작성 시작
- BooleanBuilder: 검색 조건(Title, Content, Writer) 존재 시 or 조건으로 동적 결합
- this.getQuerydsl().applyPagination(...): 페이징 처리를 쿼리에 적용 (LIMIT 문 생성)
- query.fetch() / query.fetchCount(): 실제 쿼리를 실행하여 리스트 데이터와 총 데이터 개수 조회
- return new PageImpl\<\>(...): 조회된 결과를 JPA의 페이징 객체인 Page 타입으로 변환하여 반환
'대우개발원 수업 내용 > spring boot, framework' 카테고리의 다른 글
| 자바 스프링 부트 5일차 b01 CRUD, 유효성 검사 (1) | 2026.04.09 |
|---|---|
| 자바 스프링 부트 4일차 b01 (0) | 2026.04.06 |
| 자바 스프링 부트 2일차 b01 (0) | 2026.04.02 |
| 자바 스프링 부트 1일차 b01 (0) | 2026.04.01 |
| 자바 프레임 워크 11일차 springex_web 검색 및 데이터 보존 페이징처리 (1) | 2026.04.01 |