전체 글 171

23. Query Methods란 무엇일까?

Spring Data JPA에서는 메서드 이름으로 SQL을 생성할 수 있는 Query Methods 기능을 제공합니다. JpaRepository 인터페이스에서 해당 인터페이스와 매핑되어있는 테이블에 요청하고자 하는 SQL을 메서드 이름을 사용하여 선언할 수 있습니다. import com.sparta.memo.entity.Memo;import org.springframework.data.jpa.repository.JpaRepository;import java.util.List;public interface MemoRepository extends JpaRepository { List findAllByOrderByModifiedAtDesc(); List findAllByUsername(String..

22. JPA Auditing

Timestamped  데이터의 생성(created_at), 수정(modified_at) 시간은 포스팅, 게시글, 댓글 등 다양한 데이터에 매우 자주 활용됩니다. 각각의 Entity의 생성, 수정 시간을 매번 작성하는건 너무 비효율적입니다.  Spring Data JPA에서는 시간에 대해서 자동으로 값을 넣어주는 기능인 JPA Auditing을 제공하고 있습니다. import java.time.LocalDateTime;@Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class Timestamped { @CreatedDate @Column(updatable = false) @Tempor..

21. Spring Data JPA란 무엇일까?

Spring Data JPA는 JPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈입니다.JPA를 추상화시킨 Repository 인터페이스를 제공합니다.Repository 인터페이스는 Hibernate와 같은 JPA구현체를 사용해서 **구현한 클래스를 통해 사용됩니다.개발자들은 Repository 인터페이스를 통해 JPA를 간편하게 사용할 수 있게 되었습니다.    Spring Data JPA에서는 JpaRepository 인터페이스를 구현하는 클래스를 자동으로 생성해줍니다.Spring 서버가 뜰 때 JpaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔이 되면,해당 인터페이스의 정보를 토대로 자동으로 SimpleJpaRepository 클래스를 생성해 주고, 이 클래스를 Spring ..

20. Spring의 트랜잭션

Spring의 트랜잭션Spring 프레임워크에서는 DB의 트랜잭션 개념을 애플리케이션에 적용할 수 있도록 트랜잭션 관리자를 제공합니다. @Transactional(readOnly = true)public class SimpleJpaRepository implements JpaRepositoryImplementation { ... @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null"); if (entityInformation.isNew(entity)) { em.persist(entity);..

19. 영속성 컨텍스트의 기능

1차 캐시  영속성 컨텍스트는 내부적으로 캐시 저장소를 가지고 있습니다.우리가 저장하는 Entity 객체들이 1차 캐시 즉, 캐시 저장소에 저장된다고 생각하시면됩니다.캐시 저장소는 Map 자료구조 형태로 되어있습니다.key에는 @Id로 매핑한 기본 키 즉, 식별자 값을 저장합니다.value에는 해당 Entity 클래스의 객체를 저장합니다.영속성 컨텍스트는 캐시 저장소 Key에 저장한 식별자값을 사용하여 Entity 객체를 구분하고 관리합니다.저장  em.persist(memo); 메서드가 호출되면 memo Entity 객체를 캐시 저장소에 저장합니다.     조회-캐시 저장소에 조회하는 Id가 존재하지 않은 경우캐시 저장소 조회DB SELECT 조회 후 캐시 저장소에 저장-캐시 저장소에 조회하는 Id가 ..

18-1. Persistence Context 와 Transaction

요약 : 1. 트랜잭션은 데이터베이스 작업의 논리적 단위입니다. 데이터베이스에 대한 작업 단위 속에 다수의 요청(CRUD)이 포함될 수 있습니다. 하나의 트랜잭션에 속한 요청들은 모두 성공하거나(commit) 또는 모두 실패하게(rollback) 됩니다. 2. 영속성 컨텍스트는 엔티티 객체들이 저장되는 임시 공간입니다. 동일한 트랜잭션 내에서 같은 엔티티에 여러 번 CRUD 요청이 들어오면, 데이터베이스에서 꺼내오지 않고 이곳에 저장된 엔티티 객체들을 가져옵니다. 3. 따라서 영속성 컨텍스트는 트랜잭션에 종속적입니다. 트랜잭션이 종료되면 영속성 컨텍스트도 함께 정리되거나, 영속 상태에서 준영속 상태로 바뀌는 식으로 트랜잭션과 깊은 연관성을 가집니다.   상세 내용 : 1. Persistence Conte..

체육복 + ConcurrentModificationException

https://school.programmers.co.kr/learn/courses/30/lessons/42862  처음에는 아래(오답)과 같이 작성했습니다 . class Solution { public int solution(int n, int[] lost, int[] reserve) { // 전체 학생의 수 n, // 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, // 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve int answer = n - lost.length; Set setLost = new HashSet(); Set setReserve = new HashSet(); for ..

18. 영속성 컨텍스트(Persistance Context)와 트랜잭션(Transaction)

영속성 컨텍스트(Persistance Context)Persistence를 영속성, 지속성 이라는 뜻입니다.Persistence를 객체의 관점으로 해석하자면 ‘객체가 생명(객체가 유지되는 시간)이나 공간(객체의 위치)을 자유롭게 유지하고 이동할수 있는 객체의 성질’을 의미합니다.영속성 컨텍스트를 쉽게 표현해 보자면 Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간입니다.개발자들은 JPA를 사용하여 DB에 데이터를 저장, 조회, 수정, 삭제할 수 있습니다.이러한 일련의 과정을 효율적으로 처리하기 위해 JPA는 영속성 컨텍스트에 Entity 객체들을 저장하여 관리하면서 DB와 소통합니다. 영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요합니다.개..

17. JPA란 무엇일까? Entity란 무엇일까?

ORM : Object-Relational Mapping, 객체 관계 맵핑Object : "객체"지향 언어 (자바, 파이썬)Relational : "관계형" 데이터베이스 (H2, MySQL)Mapping 반복적이고 번거로운 애플리케이션 단에서의 SQL 작업을 줄여주기 위해서 ORM 기술들이 등장 하게 됩니다.  JPA: Java Persistence API 자바 ORM 기술에 대한 표준 명세    JPA는 애플리케이션과 JDBC 사이에서 동작되고 있습니다.JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리해줍니다.또한 객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리할 수 있습니다. 하이버네이트(Hibernate)란?JPA 는 표준 명세이고, 이를..

자동차 대여 기록에서 장기/단기 대여 구분하기

https://school.programmers.co.kr/learn/courses/30/lessons/151138 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE, '%Y-%m-%d') START_DATE, DATE_FORMAT(END_DATE, '%Y-%m-%d') END_DATE, CASE WHEN DATEDIFF(END_DATE, START_DATE) + 1>= 30 THEN '장기 대여' ELSE '단기 대여' END AS RENT_TYPEFROM CAR_RENTAL_COMPANY_RENTAL_HI..