본문 바로가기
728x90
반응형

전체 글86

[JPA] JPQL과 방언(Dialect) JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리 기술을 지원함ORM을 사용하면 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 개발하므로 검색도 엔티티 객체를 대상으로 하는 방법이 필요 JPQL(Java Persistence Query Language)테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리SQL을 추상화해서 특정 데이터베이스에 의존하지 않음JPA는 JPQL을 분석하여 적절한 SQL을 만들어 데이터베이스를 조회→ 조회한 결과로 엔티티 객체를 생성해서 반환 문제는 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다는 것 JPQL 사용 시 데이터베이스 방언(Dialect)를 지정해서 사용→ 선택한 방언에 따라 해당 데이터베이스에 맞춘 적절한 SQL.. 2024. 5. 27.
[JPA] Fetch type, N+1 문제 Fetch typeEntity를 영속성 컨텍스트에서 사용할 때 연관 Entity 설정 1. EAGER(즉시 로딩)특정 엔티티를 조회할 때 연관된 모든 엔티티를 같이 조회연관 관계 Entity를 영속성 컨테이너로 전부 즉시 가져옴 2. LAZY(지연 로딩)엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연  LAZY가 보편적 권장 사항 Fetch type은 default로 ~ToMany에서는 LAZY, ~ToOne에서는 EAGER로 지정되어 있음(그래도 명시해주는 게 좋음)  N+1 문제란? 연관 관계를 가진 엔티티를 조회할 때 한 번의 쿼리로 연관된 엔티티들을 함께 가져오지 않고, 각 엔티티를 접근할 때마다 추가적인 쿼리가 발생하는 현상 →  예상보다 많은 수의 쿼리가 데이터베이스에 전송되어 성능 저.. 2024. 5. 23.
[JPA] 영속성 전이 : CASCADE 영속성 전이 : 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용영속 상태 : 영속성 컨텍스트에 저장된 상태→  JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 함→  영속성 전이를 사용해서 부모만 영속 상태로 만들면 연관된 자식까지 한 번에 영속 상태로 만들 수 있음 영속성 컨텍스트 : 엔티티를 연구적으로 저장해주는 환경 →  애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할 →  엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리 JPA Cascade란?엔티티의 생명 주기 상태 변화가 연관된 엔티티에 자동으로 전파되게 하는 옵션즉, 한 엔티티를 저장, 수정.. 2024. 5. 23.
[Spring] JPQL로 일정 조회하기 월별 일정 조회 월별 조회를 위해 year와 month를@PathVariable로 받는다. 로그인된 회원이 등록한 일정 중 year과 month에 해당하는 것만 가져와야 한다. JPQL JPA의 일부로, Query를 Table이 아닌 객체(=엔티티) 기준으로 작성하는 객체지향 쿼리 언어 일정 조회 시 startDateTime(일정 시작일자) 기준으로 검색해야 하는데, 이는 LocalDateTime 필드이다. LocalDateTime 필드를 사용하여 특정 연월(2024-04와 같은)에 해당하는 데이터를 조회하고 싶다면, @Query 어노테이션을 사용하여 커스텀 쿼리를 작성할 수 있다. @Query 어노테이션을 사용하여 Event 엔티티의 startDateTime이 2024-04~인 모든 이벤트를 조회하는 .. 2024. 4. 2.
[Spring] SSE + Scheduler로 실시간 알림 기능 구현(2) [Spring] SSE + Scheduler로 실시간 알림 기능 구현(1) [Spring] 일정 등록 시 ToDoList 넣기 💡 ToDoList 입력은 선택사항 (없어도 일정등록 가능해야 함) 💡 하나의 일정에 여러 ToDoList 입력 가능 → 테이블 따로 생성 ERD 투두리스트가 일정ID를 FK로 갖고 있 qoth-0.tistory.com 알림 설정 기능 추가와 SSE연결에 이어서 스케쥴러로 알림을 전송해보자. Spring 스케쥴러로 알림전송 메인 Application에서 @EnableScheduling을 선언해야 스케쥴러를 사용할 수 있다. @Scheduled로 스케쥴러의 옵션을 설정할 수 있다. → cron 표현식으로 매분마다 스케쥴러가 돌도록 설정 알림을 설정한 일정들 중 전송해야 할(= 과거.. 2024. 3. 27.
[Spring] SSE + Scheduler로 실시간 알림 기능 구현(1) [Spring] 일정 등록 시 ToDoList 넣기 💡 ToDoList 입력은 선택사항 (없어도 일정등록 가능해야 함) 💡 하나의 일정에 여러 ToDoList 입력 가능 → 테이블 따로 생성 ERD 투두리스트가 일정ID를 FK로 갖고 있고, 일정은 투두리스트에 대한 qoth-0.tistory.com 일정 등록 시 ToDoList 넣기에 이어서 알림설정 및 실시간 알림 기능을 구현했다. 💡 알림 설정은 선택사항 (없어도 일정등록 가능해야 함) 💡 하나의 일정에 여러 알림 설정 가능(일, 시, 분 단위) → 테이블 따로 생성 💡 알림여부가 Y면 일정알림 테이블의 알림타입과 설정시간에 맞춰 스케줄러로 알림을 전송 ERD 일정알림이 일정ID를 가지고 있고, 해당 일정은 회원ID를 가지고 있다. 일정알림에 전송여.. 2024. 3. 26.
[Spring] 일정 등록 시 ToDoList 넣기 💡 ToDoList 입력은 선택사항 (없어도 일정등록 가능해야 함) 💡 하나의 일정에 여러 ToDoList 입력 가능 → 테이블 따로 생성 ERD 투두리스트가 일정ID를 FK로 갖고 있고, 일정은 투두리스트에 대한 정보를 가지고 있지 않는다. Spring ToDoList에서 @JoinColumn으로 Event의 Id를 가지고 있다. EventRequest는 MultipartFile을 포함하고 있으므로 form-data로 데이터를 전달해줘야 한다. 그렇다면 ToDoList는 어떻게 입력 받을까? 보통 일정 등록을 할 때 ToDoList에 대한 내용도 함께 입력을 하기 때문에 동일 API에서 데이터를 받아줘야 한다. EventController에서 일정 등록 API를 보면 EventRequest 외에도 @R.. 2024. 3. 21.
[CSS] 마진 병합 마진 병합 현상형제지간의 마진 병합형제지간에 margin속성이 겹치는 경우 margin-bottom과 margin-top 중 숫자가 큰 값으로 적용250px가 아닌 150px의 공백을 갖게 됨 부모 자식간의 마진 병합자식인 뿐만 아니라 부모인 에도 영향을 미침자식에게 margin을 적용하면 부모에게도 적용이 됨 레이아웃에 영향을 미치는 속성displayBlock과 Inline 요소의 성격을 바꿀 때 사용inline-block을 사용하면 두 요소의 성격을 모두 가짐 float같은 선상에서 왼쪽 끝 정렬, 오른쪽 끝 정렬레이어가 겹치지 않는 상태로 왼쪽에서부터 나란히 정렬시키고 싶은 경우 float: left;을 연속적으로 입력선택된 요소를 왼쪽 끝 혹은 오른쪽 끝에 정렬시키고자 할 때 사용이름 그대로 선택.. 2024. 1. 22.
728x90
반응형