🌱 SPRING

    [JPA] 플러시(flush)

    [JPA] 플러시(flush)

    플러시(flush)란? 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것을 의미한다. 아래 경우에 flush가 발생한다. 트랜잭션에 commit이 발생할 때 EntityManager의 flush 메서드를 호출했을 때 JPQL 쿼리가 실행될 때 그리고 flush가 발생하면 쓰기 지연 저장소에 저장된 SQL(INSERT/UPDATE/DELETE)이 데이터베이스로 전송된다. IO 처리 시 FileStream.flush() 메서드를 사용하는 경험이 있어 flush 발생 시 영속성 컨텍스트가 비워지는 것이 아닌지 헷갈릴 수 있으나, 아니다. flush가 발생한다고 해서 영속성 컨텍스트가 비워지는 것이 아니고, 변경 사항을 DB와 동기화 하는 것을 의미한다. 그러한 이유로 flush가 발생해도 1차 캐시는 ..

    [JPA] 영속성 컨텍스트

    [JPA] 영속성 컨텍스트

    영속성 컨텍스트란? 영속성 컨텍스트는 JPA의 이해에 있어 가장 중요한 용어이다. 엔티티를 영구 저장하는 환경이라는 뜻을 가진 논리적인 개념인데, EntityManager를 통해 접근할 수 있다. EntityManger는 EntityManagerFactory에서 사용자의 요청 하나당 하나씩 생성해 DB 커넥션풀을 통해 DB에 대한 CRUD를 가능하게 하는데, EntityManagerFactory는 웹 어플리케이션 하나 당 하나만 존재할 수 있고, EntityManager는 하나의 트랜잭션 당 하나씩 존재할 수 있다. 이 말은, 멀티 스레드간 EntityManager의 공유는 불가능하다는 의미이다. 그리고 이 영속성 컨텍스트는 환경별로 EntityManager와의 관계에 있어 차이가 발생하는데, 아래와 같..

    [JPA] JPQL 맛보기

    [JPA] JPQL 맛보기

    JPQL이란? Java Persistence Query Language의 약자로, JPA에서 SQL을 추상화해 제공하는 객체 지향 쿼리 언어를 의미한다. 때문에 JPQL에서 작성된 쿼리문의 대상은 DB 테이블이 아닌 Entity 객체이다. 기본적인 문법은 SQL과 유사하며 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원한다. JPA와 마찬가지로 데이터베이스에 의존하지 않는다. JPQL의 필요성 JPA에서는 개발자가 SQL을 작성하지 않고 JPA에서 제공하는 메서드를 이용해 DB 데이터를 조회해온다. 1 Member member = EntityManager.find(Member.class, 100L); cs 그리고 객체 그래프를 탐색해 연관된 데이터를 다시 조회해온다...

    [JPA] JPA로 CRUD 작성하기

    [JPA] JPA로 CRUD 작성하기

    0. 개발환경 Java : JDK 1.8.0_151 IDE : IntelliJ 1. Maven 의존성 추가 pom.xml에 아래 코드를 작성해 의존성을 추가한다. 위에서부터 Hibernate와 MariaDB JDBC이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 4.0.0 jpa-basic ex1-jpa-basic 1.0.0 org.hibernate hibernate-core 5.3.10.Final org.mariadb.jdbc mariadb-java-client 2.6.0 Colored by Color Scripter cs 2. JPA 설정파일(persistence.xml) 작성 resources 폴더 하위에 ..

    [JPA] Dialect(방언)

    [JPA] Dialect(방언)

    세상엔 많은 데이터베이스 제품이 존재하고, 각각의 제품은 표준 SQL(ANSI SQL)을 제외한 독자적인 기능을 위한 SQL도 존재한다. SQL Server : ANSI SQL + T-SQL Oracle : ANSI SQL + PL/SQL 기타 등등... 그리고 각각의 데이터베이스에서 제공하는 문법과 함수가 차이가 있다. 가변문자 : VARCHAR(MySQL), VARCHAR2(Oracle), NVARCHAR(SQL Server) 문자열 자르는 함수 : SUBSTRING(표준 SQL), SUBSTR(Oracle) 페이징 : LIMIT(MySQL), ROWNUM(Oracle) 이러한 차이를 방언(Dialect)라고 하며, JPA에서는 추상화된 방언 클래스를 제공한다. JPA를 사용하지 않으면 애플리케이션의..

    [JPA] JPA가 뭘까?

    [JPA] JPA가 뭘까?

    1. JPA의 필요성 대부분의 애플리케이션은 객체 지향 언어로 개발되고있다. 반면, 데이터베이스는 OracleDB, MySQL, SqlServer 등 관계형 데이터베이스(RDMBS)가 주류를 이루고 있다. 때문에, 객체화된 데이터를 관계형 데이터베이스에 저장하게 되는 상황이고 그것을 위해 개발자가 SQL문을 작성하게된다. 그러다보니 자연스럽게 애플리케이션 개발 자체가 SQL을 중심으로 진행이 되는데, 그 과정에서 아래와 같은 문제점이 발생한다. Entity마다 CRUD를 위한 쿼리 작성이 필요하다. 하나의 테이블 당 최소 4개의 SQL문(SELECT, INSERT, UPDATE, DELETE)을 작성해야한다! 객체를 SQL로, SQL을 객체로 변환해주는 과정이 매번 필요하다. 테이블의 컬럼 구성이 변경되..

반응형