본문 바로가기

728x90
반응형

전체 글

(75)
연관관계 매핑 기초 - (1) JPA에서 연관관계 매핑의 목표는 객체의 참조와 테이블의 외래 키를 매핑하는 것이다 연관관계 매핑은 방향과 다중성에 의해 분류된다방향을 기준으로 단방향, 양방향으로 다중성을 기준으로 일대일, 일대다, 다대일, 다대다로 분류된다 단방향 연관관계객체 연관관계와 테이블 연관관계의 차이점참조를 통한 연관관계는 단방향으로 양방향 관계를 위해서는 반대쪽도 필드를 추가해 참조해야 한다즉, 양방향 연관관계라기 보다는 서로 다른 방향의 관계 두 개라는 것이 정확한 표현이다 객체는 참조를 통해 연관관계를 탐색하는 객체 그래프 탐색을 사용한다데이터베이스는 외래 키를 사용해 연관관계를 탐색하는 조인을 사용한다 객체 관계 매핑@Entitypublic class Member ( @Id @Column(name="MEMBER_ID"..
엔티티 매핑 - (2) 필드와 컬럼 매핑@Column객체 필드를 테이블 컬럼에 매핑한다 속성  - name: 필드와 매핑할 테이블의 컬럼 이름. 기본값은 객체의 필드 이름  - nullable: null 값의 허용 여부를 설정한다 (DDL)  - unique: 특정 컬럼에 유니크 제약조건을 설정한다 (DDL)  - length: 문자 길이 제약 조건. String 타입에만 사용한다 (DDL)  - precision, scale: BigDecimal, BigInteger에서 사용한다. 전체 자릿수와 소수 자릿수를 설정한다 (DDL)@Enumerated자바의 enum을 사용하기 위해서는 @Enumerated 어노테이션으로 매핑해야 한다 속성  - value:    - EnumType.ORDINAL:        enum에 정의된 ..
엔티티 매핑 - (1) 객체와 테이블 매핑@Entity테이블과 매핑할 클래스에 필수로 붙이는 어노테이션이다해당 어노테이션이 붙은 클래스는 JPA에서 관리하고 엔티티라고 부른다 속성  - name: JPA에서 사용한 엔티티의 이름을 지정한다 지정하지 않으면 클래스 이름 그대로 사용한다 주의할 점기본 생성자는 필수이다 (public, protected)final, enum, interface, inner 클래스에는 사용할 수 없다저장할 필드에 final을 사용하면 안된다@Table엔티티와 매핑할 테이블을 지정한다해당 어노테이션을 생략하면 엔티티 이름을 매핑할 테이블 이름으로 사용한다 속성  - name: 매핑할 테이블 이름  - catalog: catalog 기능이 있는 데이터베이스에서 catalog를 매핑한다  - schema:..
영속성 관리 - (2) 플러시 플러시를 통해 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다 플러시 호출 방법1. 직접 호츨  - flush() 메서드 직접 호출해 영속성 컨텍스트를 강제로 플러시 2. 트랜잭션 커밋 시 플러시 자동 호출 3. JPQL 쿼리 실행 전 플러시 자동 호출  - JPQL 쿼리를 실행 하기 전 엔티티가 데이터베이스에 반영되어 있지 않으면 데이터가 없거나 잘못된 데이터를 가져올 수 있으므로 JPQL을 실행하기 전 자동으로 플러시가 호출된다 플러시 모드 옵션FlushModeType.AUTO: 커밋이나 쿼리를 실행할 때 플러시 (default)FlushModeType.COMMIT: 커밋할 때에만 플러시플러시는 영속성 컨텍스트에 보관된 엔티티를 지우는 것이 아니라 영속성 컨텍스트와 데이터베이스를 동기화하..
영속성 관리 - (1) 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 하나의 엔티티 매니저 팩토리를 사용한다 엔티티 매니저가 필요할 때마다 엔티티 매니저 팩토리에서 엔티티 매니저를 생성하면 된다  - 엔티티 매니저는 여러 스레드가 동시에 접근하는 경우 동시성 문제가 발생해 스레드간 공유를 하면 안된다 영속성 컨텍스트란? 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이다persist() 메서드를 통해 엔티티 매니저는 엔티티를 영속성 컨텍스트에 저장한다 엔티티의 생명주기비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태 영속(managed): 영속성 컨텍스트에 저장된 상태 (엔티티가 관리되는 상태)준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된..
JPA란 무엇인가? JPA 소개 JPA (Java Persistence API)는 자바 ORM 기술에 대한 API 표준 명세이다 ORM (Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매핑한다는 뜻으로 객체와 테이블을 매핑해 패러다임의 불일치 문제를 개발자 대신 해결해준다- 객체를 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장하면 대신 SQL을 생성해 데이터베이스에 저장해준다- 객체와 관계형 데이터베이스를 모델링한 후 둘을 어떻게 매핑해야 하는지만 ORM 프레임워크에 알려주면된다 JPA는 인터페이스를 모아둔 것으로 사용하기 위해서 ORM 프레임워크를 선택해야 한다 (하이버네이트, EclipseLink, DataNucleus)다양한 ORM 프레임워크들이 있는데 자바에서는 하이버네이트 프레임..
JPA의 등장 배경 SQL을 직접 다룰 때 발생하는 문제점1. 반복, 반복 그리고 반복개발자가 객체와 데이터베이스 사이에서 SQL과 JDBC API를 사용해 변환 작업을 직접 해야 한다기능을 추가할 때마다 SQL을 작성하고 JDBC API를 사용하는 비슷한 작업을 반복해야 한다 2. SQL에 의존적인 개발약간의 요구사항 추가에도 DAO의 CRUD 코드와 SQL 대부분을 변경해야 한다  * DAO(Data Access Object): 특정한 데이터베이스 작업을 캡슐화한 클래스를 의미  패러다임의 불일치패러다임의 불일치란?대부분의 애플리케이션은 객체를 저장하기 위해 관계형 데이터베이스를 저장소를 사용한다 관계형 데이터베이스는 객체와 다르게 추상화, 상속, 다형성 같은 개념이 존재하지 않고데이터 중심으로 구조화되어 있고 집합적인..
교착 상태 시스템 모델(System Model) 시스템은 경쟁하는 스레드들 사이에 분배되어야 하는 유한한 자원으로 구성된다. 자원들은 다양한 유형으로 분할되고, 이들 각각은 동일한 몇개의 인스턴스들로 구성된다. 한 스레드가 어떤 자원 유형의 한 인스턴스를 요청하면, 동일한 인스턴스들 중 하나가 할당된다.   mutex lock과 세마포와 같은 동기화 도구들 역시 시스템 자원이다. 이들은 현대 컴퓨터 시스템에서 가장 일반적인 교착 상태의 발생 원인이다.   스레드는 자원을 사용하기 전에 요청해야 하고, 자원을 사용하고 난 후에는 해제해야 한다.(request, use, release) 스레드는 task를 수행하기 위해 필요한 만큼의 자원을 요청할 수 있고, 요청한 자원의 수는 전체 자원의 수를 초과할 수 없다.   ..

728x90
반응형