본문 바로가기

spring8

Spring의 동적 쿼리 : JPQL , QueryDSL 1. JPQLJPQL(Java Persistence Query Language)을 사용하면 @Query 주석을 사용하여 Repository에서 직접 쿼리를 정의할 수 있다. 또한 선택적으로 동적 매개변수를 위해 @Param과 결합할 수 있다. 예시) '제품' 엔티티가 있고 '이름' 및 '카테고리'를 기준으로 제품을 필터링한다고 가정@Repositorypublic interface ProductRepository extends JpaRepository { @Query("SELECT p FROM Product p WHERE (:name IS NULL OR p.name = :name) AND (:category IS NULL OR p.category = :category)") List findPro.. 2024. 11. 20.
Project Day 3 : 프로젝트 제목 선정, 역할분담, todo 프로젝트 제목 선정 회의 주제: 영화 리뷰 sns 사이트 후보 1. 팝콘톡 -> 팝콘(영화) 톡(소통) 2. 무비 업 스케일 -> 리뷰를 통해 영화에 대한 지식을 키워나가자 3. 영화 소담 -> 영화 리뷰를 통해 소소하게 이야기하자 4. MRS(Movie Review Sns) -> 이니셜 그대로 투표결과: 팝콘톡 4표 -> 팝콘톡 채택 역할 분담 API 명세서 https://www.notion.so/teamsparta/17b7d0c1b7be44a2bf0141b6109ed30d?v=74bc6889cd284f53b7224afaa274f123 API 명세서 | Notion Built with Notion, the all-in-one connected workspace with publishing capabil.. 2024. 3. 28.
Spring Day 32 : Booleanbuilder, Booleanexpression "BooleanBuilder"와 "BooleanExpression"은 Spring Framework에서의 Querydsl 라이브러리에서 사용되는 용어 BooleanBuilder Querydsl에서 제공하는 조건을 동적으로 구성하기 위한 빌더 클래스 복잡한 쿼리 조건을 처리하기 위해 사용되며, AND, OR 등의 논리 연산자를 사용하여 여러 개의 조건을 조합할 수 있다. ● BooleanBuilder를 사용하여 동적으로 쿼리 조건을 생성하고, 이를 쿼리 실행에 활용 BooleanExpression Querydsl에서 사용되는 논리 표현식을 나타내는 인터페이스 쿼리 조건을 정의 및 쿼리 실행에 사용한다. 또한 Querydsl의 Predicate 인터페이스를 상속받아 사용할 수 있다. ● BooleanExpr.. 2024. 3. 12.
Spring Day 25 : 팔로우 기능 구현 sns 서버를 만드는 프로젝트에서 팔로우 기능 구현을 시도했다. 먼저 user와 follow의 연관관계를 설정하지 않아, 의존성을 제거해 종속적인 문제가 발생하지 않도록 구현했다. Follow Follow entity는 고유 id와, fromUserId(팔로우 시도할 userId), toUserId(팔로우받게 될 userId)를 필드로 가진다. 그리고 유저의 id 를 요청으로 받아 Follow 객체를 생성한다. @Getter @NoArgsConstructor @Table(name = "follows") @Entity public class Follow extends Timestamped { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private .. 2024. 2. 29.
Spring Day 9 : JPA Auditing JPA Auditing Spring Data JPA에서는 시간에 대해서 자동으로 값을 넣어주는 기능인 JPA Auditing을 제공하고 있습니다. 생성(created_at), 수정(modified_at) 시간은 포스팅, 게시글, 댓글 등 다양한 데이터에 매우 자주 활용됩니다. 만약 각각의 Entity의 생성, 수정 시간을 매번 작성한다면 매우 비효율적일 것입니다. @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class Timestamped { @CreatedDate @Column(updatable = false) @Temporal(TemporalType.TIMESTAMP) private Lo.. 2024. 1. 30.
Spring Day 8 : Dirty Checking Dirty Checking JPA에서 Dirty checking은 영속성 컨텍스트(Persistence Context)에서 엔티티 객체의 상태 변경을 감지하는 메커니즘입니다. JPA는 엔티티 객체를 조회하거나 변경할 때, 엔티티의 상태를 추적하고 변경된 내용을 데이터베이스에 자동으로 반영하는 기능을 제공합니다. 영속성 컨텍스트는 JPA가 엔티티를 관리하는 논리적인 영역으로, 엔티티의 변경 여부를 추적하고 이를 데이터베이스에 동기화합니다. 엔티티 객체의 필드가 변경되면, 영속성 컨텍스트는 이를 감지하여 변경된 필드만 데이터베이스에 반영합니다. 이 과정에서 Dirty checking이 수행되어 변경된 필드만을 업데이트합니다. Dirty checking은 데이터베이스에서 특정 객체의 값을 변경하고자 할 때, .. 2024. 1. 29.
Spring Day 7 : 영속성 콘텍스트 영속성 콘텍스트 데이터베이스와 애플리케이션 사이의 중간 역할을 하는 개념. 데이터를 메모리에 저장하여 애플리케이션에서 효율적으로 사용할 수 있게 해 주며, 데이터베이스와의 상호작용을 관리합니다. 간단히 말하면, 영속성 콘텍스트는 Entity 객체를 애플리케이션과 데이터베이스 사이에서 관리해 주는 역할을 합니다. 개발자는 직접 SQL을 작성하지 않아도 JPA를 사용하여 DB에 데이터를 저장하거나 조회할 수 있으며 수정, 삭제 또한 가능합니다. 이러한 일련의 과정을 효율적으로 처리하기 위해 JPA는 영속성 콘텍스트에 Entity 객체들을 저장하여 관리하면서 DB와 소통합니다. Persistence를 객체의 관점으로 해석해 보자면 ‘객체가 생명(객체가 유지되는 시간)이나 공간(객체의 위치)을 자유롭게 유지하고.. 2024. 1. 26.
Spring Day 2 : HTTP HTTP(HyperText Transfer Protocol) 데이터를 주고받는 양식을 정의한 전 세계적인 "통신 규약" -> 컴퓨터 간 데이터를 주고받을 때 정해둔 약속. 현재 이용되는 대부분의 웹 서버가 HTTP를 기반으로 정해준 규칙에 맞게 데이터를 주고받습니다. 또한, 모든 브라우저는 HTTP 프로토콜을 기본으로 지원합니다. Request, Response HTTP로 데이터를 주고 받는 방법. 1. 브라우저는 서버에게 자신이 원하는 페이지(URL 등의 정보)를 요구(Request)합니다. 2. 서버는 브라우저가 원하는 페이지가 있는지 확인하고, 있다면 해당 페이지에 대한 데이터를 실어 응답(Response)해줍니다. 없다면 없는 페이지에 대한 데이터를 반환합니다. 3. 브라우저는 서버에게 전달 받은.. 2024. 1. 19.