스터디
JPA 프로그래밍 스터디 13장 정리
웹 애플리케이션과 영속성관리 스프링이나 J2EE 컨테이너 환경에서 JPA를 사용하면 컨테이너가 트랜잭션과 영속성 컨텍스트를 관리해준다. J2EE: Java 2 Enterprise Edition 자바 기술로 기업환경의 어플리케이션을 만드는데 필요한 스펙들을 모아둔 스펙 집합 J2EE 애플리케이션 서버는 웹컨테이너와 EJB 컨테이너 둘다 있어야 한다. 톰캣은 웹 컨테이너일 뿐이다. 보통 애플리케이션 서버에는 웹 컨테이너, EJB 컨테이너가 있다. EJB 컨테이너 : Enterprise Bean(EJB 구성 요소)은 비즈니스 논리를 포함하는 Java 프로그래밍 언어 서버 구성 요소 Enterprise Bean에는 Session Bean, Entity Bean 및 Message-Driven Bean 등 세 가지..
JPA 프로그래밍 스터디 10장 정리
10장 객체지향 쿼리 언어 10.1 객체지향 쿼리 소개 다음은 가장 단순한 검색방법이다. 식별자로 조회 : EntityManager.find() 객체 그래프 탐색 L (예:a.getB().getC()) ORM을 사용하면, 테이블 대상이 아닌 엔티티 개체를 대상으로 쿼리하는 방법이 필요하다. 엔티티 대상으로 쿼리하는 것을 JPQL(객체지향 SQL, 쿼리) 이라고 한다. 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. SQL : 데이터베이스 테이블을 대상으로 하는 쿼리 JPQL : 엔티티 객체를 대상으로 하는 객체지향 쿼리 JPQL을 사용하면 JPA는 이 JPQL을 분석한 다음 적절한 SQL을 만들어 데이터베이스를 조회한다. JPA는 JP..
JPA 프로그래밍 스터디 9장 정리
9장 값 타입 JPA에서 데이터 타입은 엔티티(Entity) 타입과 값(value) 타입으로 분류할 수 있다. 엔티티 타입 @Entity 어노테이션으로 정의 영속성 컨텍스트 내에서 식별자를 통해 지속적으로 추적가능한 객체 생명 주기가 있음 - 생성, 영속화, 소멸하는 생명 주기 존재 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입 또는 객체 식별자가 없음 생명 주기를 엔티티에 의존 값 타입은 3가지로 나눌 수 있다. 기본값 타입 (basic value type) 자바 기본 타입(int, double, ...) 래퍼 클래스(Integer, ...) String 임베디드 타입 - JPA에서 사용자가 직접 정의한 값 타입 컬렉션 값 타입 - 하나 이상의 값 타입 저장..
JPA 프로그래밍 스터디 8장 정리
8장 프록시와 연관관계 관리 프록시와 즉시로딩, 지연로딩 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 하지만 자주 함께 사용하는 객체들은 조인을 사용해서 함께 조회하는 것이 효과적이다. JPA는 즉시 로딩과 지연 로딩이라는 방법으로 둘을 모두 지원한다. 영속성 전이와 고아 객체 JPA는 연관된 객체를 함께 저장하거나 함께 삭제할 수 있는 영속성 전이와 고아 객체 제거라는 편리한 기능을 제공한다. ✅ 8.1 프록시 회원과 팀의 단방향 연관관계 @Entity @Data public class Member { private String username; @ManyToOne private Team team; } @Entit..
JPA 프로그래밍 스터디 7장 정리
7장 고급 매핑 ✅ 7.1 상속 관계 매핑 관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입 관계(Super-Type Sub-Type Relationship)라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. 슈퍼타입, 서브타입 관련 포스팅 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. (조인 전략) : 각각의 테이블로 변환 - 모두 테이블로 만들고 조회할 때 조인을 사용 단일 테이블 전략 : 통합 테이블로 변환 - 테이블을 하나만 사용해서 통합 구현 클래스마다의 테이블 전략 : 서브타입 테이블로 변환 - 서브 타입마다 하나의 테이블을 추가한다. 🔸 7.1.1 조인 전략 (JOINED) 조인 전략은 ..
JPA 프로그래밍 스터디 6장 정리
6장 다양한 연관관계 매핑 엔티티의 연관관계를 매핑할 때는 다음 3가지를 고려해야 한다. 다중성 단방향, 양방향 연관관계의 주인 연관관계가 있는 두 엔티티가 일대일 관계인지, 일대다 관계인지 다중성을 고려해야 한다. 두 엔티티 중 한쪽만 참조하는 단방향 관계인지, 서로 참조하는 양방향 관계인지 고려해야 한다. 양방향 관계면 연관관계의 주인을 정해야 한다 (mappedBy) 정리하자면, 연관관계가 있는 두 엔티티를 고려할 때는, 다중성, 단방향 양방향, 연관관계의 주인(외래키 관리)를 정해야 한다. 다중성 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) 보통 실무에서는 다대다(N:M) 관계는 잘 사용하지 않고, 다대일(N:1)과 일대다(1:..
JPA 프로그래밍 스터디 5장 정리
5장 연관관계 매핑 기초 연관관계 매핑을 이해하기 위한 핵심 키워드 관계를 가지고 있다는 의미는, 다른 엔티티를 자기 필드로 가지고 있다는 뜻이라고 생각해도 된다. 회원과 팀의 관계 회원과 팀이 있다고 가정. 한 회원은 한 팀만 가질 수 있고, 한 팀은 여러 회원을 가질 수 있다고 가정하면 회원 : 팀 N : 1 = 다대일 관계라고 표현 팀 : 회원 1 : N = 일대다 관계라고 표현 방향(direction) 단방향관계 : 회원이 팀을 필드로 가지고 있고, 팀은 회원을 필드로 가지고 있지 않는 경우가 있듯이 둘 중 한쪽만 참조하는 관계 보통 외래키가 있는 쪽은 무조건 관계를 가지고 있다. 양방향관계 : 회원이 팀을 필드로 가지고있고, 팀도 회원을 필드로 가지고 있는 경우. 둘 다 서로 참조하는 관계 방향..
JPA 프로그래밍 스터디 4장 정리
4 엔티티 매핑 4.1 @Entity 4.2 @Table 4.3 다양한 매핑 사용 4.4 데이터베이스 스키마 자동 생성 4.5 DDL 생성 기능 4.6 기본 키 매핑 4.7 필드와 컬럼 매핑 : 레퍼런스 JPA는 다양한 어노테이션을 지원한다. * 객체와 테이블 매핑 : @Entity, @Table * 기본키 매핑 : @Id * 필드와 컬럼 매핑 : @Column * 연관관계 매핑 : @ManyToOne, @JoinColumn, @OneToMany ... 4.1 @Entity 관계형 데이터베이스의 테이블과 매핑할 클래스는 @Entity 어노테이션을 클래스 위에 필수로 붙여줘야 한다. @Entity(name = "") public class Member { ... public Member() {} // ..
JPA 프로그래밍 스터디 3장 정리
JAVA ORM 표준 JPA 프로그래밍 - 김영한님 책 스터디 개인 3장 정리 3장 영속성 관리 3.1 엔티티 매니저 팩토리와 엔티티 매니저 3.2 영속성 컨텍스트란 3.3 엔티티의 생명주기 3.4 영속성 컨텍스트의 특징 3.5 플러시 3.6 준영속 3.7 정리 엔티티 매니저 팩토리와 엔티티 매니저 JPA가 제공하는 기능은 크게 2가지로 나눌 수 있다. 엔티티와 테이블을 매핑하는 설계 부분 매핑한 엔티티를 실제 사용하는 부분 엔티티 매니저는 엔티티 관리자이며 개발자는 가상의 데이터베이스 라고 생각하면 된다. 엔티티 매니저가 하는일은 다음과 같다 엔티티 저장 엔티티 수정 엔티티 조회 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다. jpa를 사..
클린 아키텍처 2부.
클린아키텍처를 스터디하면서 책의 내용, 토론한 내용, 개인 생각을 정리한 글입니다. 2부 3장, 4장, 5장, 6장 3장 패러다임 개요 패러다임 : 프로그래밍을 하는 방법 언어네는 독립적이며 어떤 프로그래밍 구조를 사용할 지, 언제 이 구조를 사용할 지 결정한다. 현재까지의 프로그래밍 패러다임에는 3가지 종류가 있다. 이 3가지 외의 패러다임은 현재까지는 존재하지 않는다 1. 구조적 프로그래밍 최초로 적용된 패러다임(하지만 최초로 만들어진 패러다임은 아니다). 1968년 네덜란드의 에르허츠 비버 데이크스트라 가 발견했다. 무분별한 점프문(goto문)은 구조에 해롭고 이걸 if / then / else / do / while /until과 같이 더 익숙한 구조로 대체했다 구조적 프로그래밍은 제어흐름의 직접..