목록Spring/개념 정리 (14)
코드 그라데이션
Annotation 사용처 @Repository 퍼시스턴스(persistence) 레이어, 영속성을 가지는 속성(파일, 데이터베이스 등) @Service 서비스 레이어 @Controller 프레젠테이션 레이어
값 타입 엔티티(Entity)에 속하지 않고, 단순히 엔티티의 속성으로 사용되는 객체 JPA에서 임베디드(Embedded) 타입도 값 타입의 한 종류 임베디드 타입 여러 개의 속성을 하나로 묶어 하나의 객체로 표현할 수 있도록 하는 것 ex. 주소(Address) 객체를 임베디드 타입으로 사용 많이 함. 이러한 경우 주소는 엔티티가 아니라, 엔티티의 속성으로 존재 + 해당 엔티티와 생명주기를 공유한다. 임베디드 타입 사용 시 코드의 재사용성과 가독성 향상. 복합적 데이터를 간단하게 모델링할 수 있음. 필요한 경우 임베디드 타입을 재사용하여 중복을 피할 수 있음. JPA에서 임베디드 타입 사용하기 임베디드 타입으로 사용할 클래스를 정의. 해당 클래스에 @Embeddable 어노테이션을 붙여, JPA에게 이..
SpringData 구조 SpringData 기능 목록 강력한 리포지토리 및 사용자 지정 객체 매핑 추상화 리포지토리 메서드 이름에서 동적 쿼리 파생 기본 속성을 제공하는 구현 도메인 기본 클래스 명료한 추적기능 지원(생성일시, 마지막 변경일시, 생성자, 마지막 변경자) 사용자 지정 리포지토리 코드 통합 가능성 JavaConfig 및 사용자 지정 XML 네임스페이스를 통한 간편한 Spring 통합 Spring MVC 컨트롤러와의 고급 통합 교차 스토어 지속성에 대한 실험적 지원 SpringData Jpa 와 JpaRepository 원리 Repository 는 MarkerInterface 로 특별한 기능은 없음 Repository ~ JpaRepository 까지는 **@NotRepositoryBean*..
JPA는 귀찮은 작업들을 처리해주는 편리한 도구. 예를 들면, 지금 코드에 있는 Product라는 것도 관계형 데이터베이스에 있는 하나의 row인데 쿼리를 직접 짤 필요 없이 객체 단위로 저장을 하거나 조회를 하고, 객체 째로 주면 jpa가 알아서 Insert 쿼리를 날려주고, 조회를 한다고 하면 그 row를 다시 객체로 변환하는 귀찮은 작업들을 도와주는 것도 맞다. "패러다임 불일치" 데이터베이스에서 보는 객체는 하나의 row인데, 객체에서는 하나의 클래스(다름) 이 부분을 자동 변환을 통해 해결해줌. 그런데 이러한 작업을 하려면, 적어도 "데이터베이스에 있는 이 row는 클래스와 어떻게 매핑이 될 거야" 라고 하는 최소한의 정보는 줘야 해. 그게 이제 "매핑 관계 설정" 이 되는 거지. @Entity..
엔티티 매핑 관련 어노테이션 어노테이션 설명 @Entity 클래스를 엔티티로 선언 @Table 엔티티와 매핑할 테이블을 지정 @Id 테이블의 기본키에 사용할 속성을 지정 @GenerateValue 키 값을 생성하는 전략 명시 @Column 필드와 컬럼 매핑 @Lob BLOB, CLOB 타입 매핑 @CreationTimestamp insert 시 시간 자동 저장 @Enumerated enum 타입 매핑 @Transient 해당 필드 데이터베이스 매핑 무시 @Temporal 날짜 타입 매핑 @CreateDate 엔티티가 생성되어 저장될 때 시간 자동 저장 @LastModifiedDate 조회한 엔티티의 값을 변경할 때 시간 자동 저장 BLOB, CLOB의 의미 - CLOB이란 사이즈가 큰 데이터를 외부 파일..
* 영속성 컨텍스트는 애플리케이션과 데이터베이스 사이에 있는 중간 계층이다. - 이렇게 중간 계층을 만들면 버퍼링, 캐싱 등을 할 수 있다. 1차 캐시 - 영속성 컨텍스트에는 1차 캐시가 존재하며 Map 로 저장된다. - entityManager.find() 메소드 호출 시 영속성 컨텍스트의 1차 캐시를 조회한다. - 엔티티가 존재할 경우 해당 엔티티를 반환하고, 엔티티가 없으면 데이터베이스에서 조회 후 1차 캐시에 저장 및 반환한다. 동일성 보장 - 하나의 트랜젝션에서 같은 키값으로 영속성 컨텍스트에 저장된 엔티티 조회 시 같은 엔티티 조회를 보장한다. - 이는 1차 캐시에 저장된 엔티티를 조회하기 때문에 가능하다. 트랜젝션을 지원하는 쓰기 지연 - 영속성 컨텍스트에는 쓰기 지연 SQL 저장소가 존재한..
엔티티 (Entity) : 엔티티란 데이터베이스의 테이블에 대응하는 클래스이다. @Entity가 붙은 클래스는 JPA에서 관리하며 엔티티라고 한다. 데이터베이스에 item 테이블을 만들고 이에 대응 되는 item 클래스를 만들어서 @Entity 어노테이션을 붙이면 이 클래스가 엔티티가 되는 것. 클래스 자체나 생성한 인스턴스도 엔티티라고 부른다. 엔티티 매니저 팩토리 (Entity Manager Factory) : 엔티티 매니저 인스턴스를 관리하는 주체 - 애플리케이션 실행 시 한 개만 만들어지며 사용자로부터 요청이 오면 엔티티 매니저 팩토리로부터 엔티티 매니저를 생성한다. 엔티티 매니저 (Entity Manager) : 영속성 컨텍스트에 접근하여 엔티티에 대한 데이터베이스 작업을 제공한다. - 내부적으..