CS(47)
-
[Spring/Springboot] Fetch Join
Fetch Join 사용하기 이전 쿼리 @Override public Page dynamicQueryWithBooleanBuilder(String storeName, Pageable pageable) { BooleanBuilder predicate = new BooleanBuilder(); if (storeName != null) { predicate.and(review.store.name.eq(storeName)); } // 리뷰와 스토어 조인을 통해 페이징 쿼리 작성 List reviews = jpqlQueryFactory .selectFrom(review) ..
2024.12.15 -
[Spring/Springboot] JPA 다양한 쿼리 방법 - JPQL/QueryDSL
JPQL가장 단순한 조회 방법EntityManager.find()객체 그래프 탐색 (a.getB(), a.getC())만약 나이가 18살 이상인 회원을 모두 검색하고 싶다면? → 하나를 찍어서 가져올 수 있는 것이 아님 ⇒ 위 방법으로 해결 불가 ⇒ 문제는 검색 쿼리JPA를 사용하면 DB table이 아닌 엔티티 객체를 중심으로 개발 ⇒ 검색 또한 엔티티 객체를 대상으로 검색모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요 👉 [해결] JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공- SQL 문법과 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원-..
2024.12.15 -
[Spring/Springboot] 영속성(Persistence) - 1차 캐시/변경 감지(Dirty Checking)/지연 로딩(Lazy Loading)
public static void main(String[] args){EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");EntityManager em = emf. createEntityManager();EntityTransactiono tx = em.getTransaction();tx.begin();try{ //비영속 Member member = new Member(); member.setId(100L); member.setName("HelloJPA"); //영속 em.persist(member); //영속 상태가 되었다고 DB에 바로 쿼리가 날라가는 것이 아님 //transaction을 커밋하는 시점에 영속성 컨텍..
2024.12.15 -
[Spring/Springboot] 도메인/양방향매핑/N+1 문제
DomainDomain 객체는 애플리케이션의 핵심 비즈니스 로직과 관련된 데이터를 포함하는 객체로, 데이터베이스 테이블과 매핑되는 클래스역할: 데이터베이스 테이블과 1:1로 매핑 되는 객체로, 애플리케이션의 핵심 데이터를 담음이 객체는 비즈니스 로직을 포함할 수도 있음@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // getters and setters}양방향 매핑양방향 매핑은 연관 관계 주인이 아닌 엔티티에게도 연관 관계를 주입하는 것[장점]객체 그래프 탐색으로 인..
2024.12.15 -
[Spring/Springboot] 서블릿(Servlet)
서브릿(Servlet)Servlet이 없다면?HTML Form 데이터 전송을 하면, 웹 브라우저가 생성한 요청 HTTP 메세지를 만들어서 서버로 전송함→ 이 때, 만약 웹 서버를 직접 다 구현해야 한다면, 아래의 단계를 모두 개발자가 직접 수행해야함서버 TCP/IP 연결 대기, 소켓 연결HTTP 요청 메세지를 파싱해서 읽고,POST 방식, /save URL 인지Content-Type 확인HTTP 메세지 바디 내용 파싱 → username, age 데이터를 사용할 수 있게 파싱저장 프로세스 실행비즈니스 로직 실행 → 데이터베이스에 저장 요청HTTP 응답 메세지 생성 시작HTTP 시작 라인 생성Header 생성메세지 바디에 HTML 생성에서 입력TCP/IP 에 응답 전달, 소켓 종료⇒ 그러나 서블릿을 지원하..
2024.12.15 -
[Spring/Springboot] AOP 관점 지향 프로그래밍
AOP(aspect-oriented programming) : 관점 지향 프로그래밍AOP는 핵심 비즈니스 로직에 직접적인 변경 없이, 추가적인 작업(횡단 관심사)을 더 쉽게 관리할 수 있게 해줌횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임코드 그 자체를 수정하지 않는 대신 기존의 코드에 추가 동작(어드바이스)을 추가함으로써 수행어느 코드가 포인트컷(pointcut) 사양을 통해 수정되는지를 따로 지정기능의 코드 핵심부를 어수선하게 채우지 않고도 비즈니스 로직에 핵심적이지 않은 동작들을 프로그램에 추가할 수 있게 함AOP 예시 시나리오여러분이 친구들을 초대해서 집에서 '스파게티 파티'를 열기로 했다고 상상해보세요. 스파게티를 ..
2024.12.15