전체 글
-
[JPA] 엔티티 매니저, 엔티티 매니저 팩토리, 영속성 컨텍스JPA 2022. 7. 9. 23:54
참고사항 1. 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하기 때문에 서로 다른 스레드 간에 공유해도 되지만 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하기 때문에 스레드 간 절대 공유하면 안된다. 참고사항 2. 엔티티 매니저는 데이터 베이스 연결이 꼭 필요한 시점까지 커넥션을 얻지 않는다. 보통은 트랜잭션을 시작할 때 커넥션을 획득한다. 영속성 컨텍스트란? 엔티티를 영구 저장하는 환경으로 엔티티 매니저의 persist 메서드는 엔티티 매니저를 사용해서 엔티티를 영속성 컨텍스트에 저장한다. 엔티티의 4가지 상태 1. 비영속 : 객체 생성 상태로 영속성 컨텍스트와 관계가 없는 상태 2. 영속 : 영속성 컨텍스트에 저장된 상태 3. 준영속 : 영속성 컨텍스트에 저장되었다가..
-
[JPA] JPA에서 엔티티 매니저 설정JPA 2022. 7. 9. 16:35
1. XML 등 설정 정보를 통해 엔티티 매니저 팩토리를 생성한다. (Persistence 클래스를 사용한다.) 엔티티 매니저 팩토리의 경우 생성하는 비용이 크기 때문에 애플리케이션 전체에서 딱 한번만 생성하고 공유한다. 애플리케이션 종료 시, close 메서드를 호출하여 종료 시킨다. 2. 엔티티 매니저를 생성 엔티티 매니저를 통해 엔티티를 CRUD 할 수 있다. 엔티티 매니저의 경우 DB 커넥션과 밀접하기 때문에 쓰레드간 공유하거나 재사용 할 수 없다. 사용이 끝날 경우 close 메서드를 호출하여 종료 시킨다. 3. 트랜잭션 관리 JPA 사용 시, 트랜잭션 안에서 데이터를 변경해야 한다. 트랜잭션 없이 데이터를 변경할 경우, 예외가 발생한다. 따라서 엔티티 매니저에서 먼저 트랜잭션 API를 받아온다..
-
[JPA] 데이터 베이스 방언 - dialectJPA 2022. 7. 9. 16:27
JPA는 특정 데이터베이스에 종속적이지 않기 때문에 교체에 용이하나 각 DB별 SQL문법과 함수가 조금씩 다르다. - 데이터 타입의 차이 (VARCHAR, VARCHAR2) - 함수명의 차이 (SUBSTRING(), SUBSTR()) - 페이징 처리 차이 (LIMIT, ROWNUM) 위와 같이 각 데이터 베이스별 차이가 나타남에 있어서 SQL 표준이 아니거나 특정 DB만이 가지는 고유한 기술을 JPA에서는 방언(dialect)이라고 한다. JPA에서는 특정 DB에 대한 방언을 설정함으로써 사용자는 JPA의 표준 문법에 맞춰 JPA를 사용하면 애플리케이션 코드를 DB를 교체함에 따라 수정하지 않아도 된다. [참고 : 자바 ORM 표준 JPA 프로그래밍]
-
[JPA] 매핑 애너테이션JPA 2022. 7. 9. 16:23
객체와 테이블을 매핑하는 애너테이션들 @Entity 클래스를 테이블과 매핑한다고 JPA에게 알리는 애너테이션 @Table 엔티티 클래스에 매핑할 테이블 정보를 알려주는 애너테이션으로 name 속성을 사용하여 매핑하는 테이블 이름을 직접 작성할 수 있다. 생략 시에는 엔티티 이름을 테이블 이름으로 매핑한다. @Id 엔티티 클래스의 필드를 테이블 기본키에 매핑하는 애너테이션으로 해당 필드를 식별자 필드라고 지칭한다. @Column 필드를 컬럼에 매핑하는 애너테이션으로 name속성을 통해 데이터베이스 테이블의 컬럼명을 직접 작성할 수 있다. 생략할 경우, 필드명으로 컬럼명을 매핑한다. 대소문자를 구분하는 DB일 경우에는 name 속성을 통해 명시적으로 매핑한다. @Getter @Setter @Entity @T..
-
[JPA] JPA란 무엇인가?JPA 2022. 7. 9. 16:16
JPA란? 애플리케이션과 JDBC 사이에서 동작하는 자바 ORM 표준기술을 의미한다. 즉, 자바 ORM 기술에 대한 API 표준 명세서(인터페이스 모음)으로 대표적인 구현체로 Hibernate가 있다. JPA의 장점 1. 생산성 : CRUD SQL 처리, DDL 자동 생성 제공 2. 유지보수 : 필드(엔티티) 추가 삭제에 따른 유지보수 코드 수 감소 3. 패러다임 불일치 해결 : 상속, 연관관계, 객체 그래프 탐색, 비교하기 등 문제를 해결 4. 성능 : 반복 조회 시 최초 조회한 객체를 재사용 5. 데이터 접근 추상화, 벤더 독립성 : 데이터 베이스 기술에 종속되지 않는다. 6. 표준 : ORM 기술 표준으로 이를 구현한 구현체 변경이 쉽다. ORM이란? 객체와 관계형 데이터를 매핑하는 것으로 SQL을..
-
[JPA] 객체와 RDBMS의 패러다임 불일치에 따라 발생하는 문제들JPA 2022. 7. 9. 16:06
JDBC API가 개발자가 직접 SQL을 다루었던 것 과는 달리 JPA를 사용할 경우 JPA가 제공하는 API가 개발자를 대신하여 저장, 조회, 수정, 연관된 객체 조회 등, 적절한 SQL문을 생성하고 DB에 전달한다. 객체와 RDBMS의 지향하는 목적 불일치에 따라 발생하는 문제들 1. 상속 부모 클래스 A를 상속한 B를 등록, 조회할 경우 A, B에 해당하는 SQL문을 모두 작성해야한다. 2. 연관관계 객체는 참조를 바탕으로 접근하여 연관된 객체를 조회한다. 테이블은 외래키를 사용하여 테이블 연관관계를 바탕으로 조인을 사용해서 연관된 테이블을 조회한다. 3. 객체 그래프 탐색 SQL을 직접 다룰때에는 처음 실행하는 SQL에 따라 객체 그래프를 어디까지 탐색할 수 있을지 정해진다. 4. 비교 DB는 기..
-
[JPA] SQL을 직접 다룰 때, 발생하는 문제점JPA 2022. 7. 9. 15:55
예를 들어 자바로 개발하는 애플리케이션에서 RDBMS를 JDBC API를 사용하여 관리하는 경우 데이터베이스는 객체와 다른 데이터 중심구조를 가지기 때문에 객체로 데이터를 직접 조회하거나 등록하는 것이 불가능하고 애플리케이션과 DB 사이에서 SQL과 JDBC API를 사용한 변환 작업을 많이 해주어야한다. 또한 CRUD관련 요구사항이 변경되거나 연관된 객체가 추가되는 경우 관련 코드를 일일이 수정해야하는 등의 SQL에 의존적인 개발을 하게된다. 즉, DAO에 추가되는 메서드나 각 객체에 추가되는 필드와 관계 없이 모든 결과는 SQL이 어떻게 작성되어 있고 동작하는지에 달려있다. 그리고 이는 엔티티를 개발자가 신뢰할 수 없게된다. (중요도 : SQL >>>>>>>>>>>>>. 엔티티) 또한 SQL과 JDB..