전체 글

·JPA
객체지향 쿼리 언어는 무엇이 있을까?      JPA에서 지원하는 쿼리 --특정 데이터에 접근하기 위해서는 결국 SQL문을 통해 DB에 접근해야 한다. JPA에는 다양한 쿼리 방법을 지원한다.JPQLJPA Criteria  (Criteria API)QueryDSLNative QueryJDBC API JDBC를 직접 사용해도 된다.다만 JDBC는 JPA와 관련이 없다 보니 바로 DB에 적용되는 것이 아니라서 영속성 컨텍스트를 적절한 시점에 강제로 flush()를 해줘야 한다.--    JPQL  (Java Persistence Query Language) --JPQL은JPA에서 제공하는 객체 중신의 쿼리 언어로기존 SQL문과 문법이 유사하지만, 테이블이 아닌 엔티티를 대상으로 동작한다.(JPA가 JPQL을..
·JPA
JPA에서 사용하는 데이터 타입은 무엇이 있을까?      JPA의 데이터 타입 --JPA에서 지원하는 데이터 타입은 2개로 분류된다.Entity 타입값 타입Entity 타입은@Entity로 정의된 클래스(객체)로데이터가 변해도 식별자를 통해 지속적으로 추적이 가능하다.즉, 특정 엔티티의 내부 데이터를 변경해도 식별자를 통해 어떤 데이터인지 인식 가능값 타입은int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 의미하며따로 식별자가 없고 값만 존재하여 값 변경 시 추적이 불가능하다.즉, 값이 100에서 200으로 변경하면 기존에 100이었는지 인식 불가능  값 타입은 크게 3가지로 분류된다.기본 타입임베디드 타입 (복합 값 타입)컬렉션 값 타입그 외의 타입 종류-  ..
·JPA
영속성 전이와 고야 객체는 무엇인가?      영속성 전이  (CASCADE) --영속성 전이는특정 엔티티를 영속 상태로 만들 때 해당 엔티티와 연관된 엔티티도 함께 영속 상태로 만들기 위해 사용된다.즉, 부모 엔티티의 상태 변경이 자식 엔티티에도 전이되도록 설정하는 기능으로부모 엔티티에 대한 데이터를 저장할 때 자식 엔티티도 함께 저장된다. @Entitypublic class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent", cascade = CascadType.ALL) private List childList = new ArrayList(); ...
·JPA
즉시 로딩과 지연 로딩은 무엇일까?      JPA의 프록시 --JPA의 프록시와 일반적인 프록시는 같은 개념이지만 각자 목적이 다르다.JPA에서 사용하는 프록시도 그냥 "프록시"라고 부르지만정확하게 명칭 할 때에는"JPA 프록시" 또는 "하이버네이트 프록시", "지연 로딩 프록시"라고도 부른다. 일반적으로 프록시는"대리인" 역할을 하는 객체로실제 객체 대신 가짜 객체(프록시)를 만들어서 대신 동작하게 하는 패턴이다.원본 객체의 접근을 제어원본 객체가 무겁거나 생성 비용이 크면 프록시가 대신 처리원본 객체를 감싸서 추가 기능을 제공 (ex. 로깅, 캐싱, 접근 제어 등) 예시로네트워크 프록시 인터넷에서VPN이나 프록시 서버를 사용하면,내 요청을 대신 전달해 주는 서버가 프록시 역할을 수행한다.  JPA의..
·JPA
상속관계 매핑은 무엇일까?      관계형 DB의 상속 관계 --자바 객체의 상속관계처럼관계형 DB에는 상속 관계가 존재하지 않는다. 다만 "슈퍼타입", "서브타입" 관계라는 모델링 기법을 통해 객체 상속과 유사한 형태를 만들 수 있다. 즉, 상속관계 매핑은객체의 상속 구조와 DB의 슈퍼타입, 서브타입 관계를 매핑하는 것을 의미한다.  상속관계 매핑에는 3가지 구현 방법이 존재한다.조인 전략 (각 테이블로 변환)단일 테이블 전략 (통합 테이블로 변환)구현 클래스마다 테이블 전략 (서브타입 테이블로 변환)  조인 전략  (각 테이블로 변환) Item 테이블을 우선 생성하고해당 테이블 하위에 알맞은 테이블(Water, Book, Car)을 추가로 생성하며추가로 필요할 때마다 특정 테이블을 조인하는 방식이다...
·JPA
연관관계 매핑에는 어떤 방법들이 있을까?      단방향 연관관계 --위 그림은 N:1 단방향 연관관계다.  (N : Member,  1 : Team)  단방향 연관관계는A 엔티티에서 B 엔티티를 참조하는 방식으로A 객체에서는 B객체로 관계를 따라 탐색(접근)이 가능하지만반대로 B객체에서 A 객체로는 관계를 따라 탐색(접근)이 불가능하다. 즉, Member에서는 Team을 참조하고 있기 때문에 Member에서 Team을 탐색할 수 있지만반대로 Team에서는 Member를 참조하고 있지 않아 Member에 대해 탐색이 불가능하다.  단방향 연관관계 예시 코드@Entitypublic class Member { ... @ManyToOne @JoinColumn(name = "team_id") ..
·JPA
엔티티 매핑은 어떻게 할까?      객체와 테이블 매핑 --객체와 테이블을 매핑한다는 것은특정 객체(클래스)를 DB의 테이블과 연결하여 해당 객체를 가지고 테이블을 관리할 수 있도록 구축하는 것이다. JPA에서 객체와 테이블을 매핑하기 위해서 "@Entity"와 "@Table" 등의 어노테이션을 사용해야 한다.  @Entity해당 클래스를 JPA가 관리하는 엔티티(Entity)로 사용하겠다고 선언하는 어노테이션이다.(엔티티 = 테이블과 매핑되는 객체) @Entity // 엔티티 선언public class Member { @Id // 기본 키 매핑 private Long id; private String username; ...} @Entity를 선언하면기본적으로 ..
·JPA
영속성은 어떻게 관리될까?      영속성 컨텍스트  (Persistence Context) --영속성(Persistence)은데이터를 프로그램이 종료되더라도 유지할 수 있도록 저장하는 개념으로일반적으로 애플리케이션에서 중요한 데이터를 DB나 파일 시스템 같은 영구 저장소에 저장하여,시스템이 재시작되거나 장애가 발생해도 데이터를 유지할 수 있도록 한다. 영속성 컨텍스트는 JPA에서 엔티티 객체를 관리하고, 트랜젝션이 끝나면 변경 사항을 DB에 반영한다.굳이 해석하면 "엔티티를 영구 저장하는 환경"이다.  엔티티의 생명 주기비영속  (new / Transient)영속  (Persistent)준영속  (Detached)삭제  (Removed) 비영속과 준영속은 비슷해 보이지만단 한 번이라도 영속성 컨텍스트에..