엔티티의 연관관계 매핑시 고려할거 정리

JPA

고려할건 크게 3가지다.

  • 다중성
  • 단방향, 양방향
  • 연관관계의 주인

다중성 : 두 엔티티의 연관관계를 나타냄 (예: 일대다,다대일,일대일,다대다) 다중성을 판단하기 힘들땐 반대방향을 생각하면 됨 (일대다의 반대는 다대일)

  • 다대일(@ManyToOne)
  • 일대다(@OneToMany)
  • 일대일(@OneToOne)
  • 다대다(@ManyToMany)

연관관계 기초

JPA
  • 객체의 참조와 테이블의 외래 키를 매핑하는 것이 이 장의 목표다.*

핵심 키워드

  • 방향(Direction): [단방향, 양방향]이 있다. 한 쪽만 참조하는 것을 단방향 관계라 하고, 양쪽 모두 서로 참조하는 것을 양방향 관계라 한다. 방향은 객체관계에만 존재하고 테이블 관계는 항상 양방향이다.
  • 다중성(Multiplicty): [다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M)] 다중성이 있다.
  • 연관관계의 주인(Owner): 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야 한다.

엔티티 매핑

JPA
  • 객체와 테이블 매핑 : @Entity, @Table
  • 기본 키 매핑 : @Id
  • 필드와 컬럼 매핑 : @Column
  • 연관관계 매핑 : @ManyToOne, @JoinColumn

@Entity(클래스) : 테이블과 매핑할 클래스, JPA가 관리함

@Table(클래스) : 엔티티와 매핑할 테이블 (생략시 엔티티명으로 적용)

  • uniqueConstraints(DDL) : DDL생성시 유니크 제약조건 만듬.

@Column(필드) : 칼럼을 매핑한다.

영속성 관리

JPA

개요

  • EntityManagerFactory : EntityManager를 만드는 공장. 애플리케이션에서 persistens.xml의 persistens-unit갯수 만큼만 있어야함
  • EntityManager : 요청이 올때마다 생성 해도 됨.(커넥션풀에서 커넥션 한개씩 이라고 생각해도 될듯)

persistencecontext4

  • persistence context(영속성 컨텍스트) : ‘엔티티를 영구 저장하는 환경’

특징

  • 영속 상태인 엔티티는 식별자 값이 반드시 있어야 한다. (식별자 값이없으면 예외 발생)
  • 트랜잭션 커밋 하는 순간 DB 반영힘 이를 플러시(flush)라 함

JPA 소개 JPA 시작

JPA

1. JPA 소개

하이버네이트 오픈소스 ORM 프레임워크가 나온 후 자바빈이 버려지고 하이버네이트, 이클립스링크등의 ORM 프레임워크로 자바 ORM 표준을 정한것이 JPA 이다.

JPA(Java Persistent API) : 관계형 데이터베이스에 접근하기 위한 표준 ORM 기술을 제공하며, 기존에 EJB에서 제공되던 엔터티 빈(Entity Bean)을 대체하는 기술이다. JPA는 JSR 220에서 정의된 EJB 3.0 스펙의 일부로 정의가 되어 있지만, JPA는 EJB 컨테이너에 의존하지 않으며 EJB, 웹 모듈 및 Java SE 클라이언트에서 모두 사용이 가능하다. 또한, JPA는 사용자가 원하는 퍼시스턴스 프로바이더 구현체를 선택해서 사용할 수 있다.

ORM(Object Relational Mapping) : 관계형 데이터베이스를 객체에 매핑.

왜 JPA를 사용해야 하는가?

  1. 생산성 : 지루하고 반복적인 CRUD 코드를 직접 작성하지 않아도 된다.
  2. 유지보수 : 엔티티에 필드를 하나만 추가해줘도 등록, 수정, 조회 자동으로 매핑 된다.
  3. 패러다임의 불일치 해결 : 관계형 DB로 객체지향적인 코딩이 가능해 진다.
  4. 성능 : 한번 조회한건 캐시를 사용함으로 똑같은걸 2번 조회 하지 않는다.(1차캐시)
  5. 데이터 접근 추상화와 벤더 독립성 : 방언을 통해 자유자제로 다른 DB로 변경이 가능 하다.
  6. 표준 : 자바 진영의 ORM 표준이다.

스프링부트 jre 2개 추가 오류

201606121433
최근에 스프링 부트 그래들 프로젝트를 생성시에 jre 2개가 잡히는 문제가 발생하였습니다.

그래서 jdk를 지웠다 다시 설치 해보기도 하였으며 결국 sts를 지우고 다시 깔았지만 동일한 현상이 지속되었습니다.

그러던중 .classpath에 들어가서 확인해보니 자바 라이브러리를 불러오는 부분에서

KSUG Growing Application 애플리케이션 아키텍처 안티 패턴 후기

개요

2015년 11월 28일 KSUG(한국 스프링 사용자 모임) 에서 주최 하는 세미나를 다녀 왔습니다.

http://www.ksug.org/seminar/20151128/

세미나의 전체적인 내용은 부제목에 나와 있듯이 도메인 모델(객체지향)과 객체 설계를 통해 애플리케이션을 작성 하면 어떠한 장점이 있는지 결국 이 장점들이 Spring Framework에 다 스며 들어 있어서 결국 Spring Framework를 쓰면 될것 처럼 보였습니다.

첫번째 시간 SK planet 박성철님께서 애플리케이션 아키텍처 안티 패턴이라는 주제로 세미나를 진행해 주셨습니다.

http://www.slideshare.net/gyumee/ss-55616001

우리 업계에서 인식하지 못하는 사이에 학습되어 반복되는 애플리케이션 아키텍처 안티 패턴을 규명하고 이것들이 우리에게 어떤 고통을 주는지, 왜 이런 패턴을 우리 코드에 스며들어 사라지지 않는지 이야기해 봅니다.

안티패턴 총 6가지로 구성되어 있으며 짧게 다루겠습니다.