상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑이란 객체의 상속과 DB의 슈퍼타입-서브타입 관계를 매핑하는 것을 의미한다. : 조인전략(각각 테이블로 변환), 단일 테이블 전략, 구현 클래스마다 테이블 전략(서브타입 테이블로 변환) 기법이 있다. Album, Movie, Book은 모두id, name, price를 가지고 있다(공통 변수) 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name="DTYPE"..
연관관계 매핑 시 고려사항 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 즉, 방향의 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조 가능 (단방향) 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향(객체 입장 : 단방향을 2개) 연관관계 주인 외래 키를 관리하는 곳을 연관관계 주인으로 관리하자. 주인의 반대편은 단순 조회만 가능하도록 설계하는 것이 바람직하다. 다대일 [N:1] 다대일(N:1) 단방향 ERD 가장 많이 사용하는 연관관계이다. 다대일의 반대 → 일대다 다대일 양방향 ERD 외래 키가 있는 쪽이 연관관계의 주인이다. 양쪽을 서로 참조하도록 개발한다..
단방향 연관관계 목표 객체와 테이블 연관관계의 차이를 이해해야 한다. 객체의 참조와 테이블의 외래 키를 어떻게 매핑하는지에 대해 이해한다. 용어 이해 방향(Direction): 단방향, 양방향 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리가 필요 연관관계가 필요한 이유 : 객체지향 설계의 목표는 자율적인 객체들의 협력 공통체를 만드는 것이다. 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원(N)과 팀(1)은 다대일 관계이다. 객체를 테이블에 맞추어 모델링 객체를 테이블에 맞추어 모델링 코드 @Entity public class Member { @Id @G..
객체와 테이블 매핑 엔티티 매핑 소개 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne,@JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리하는 클래스로 엔티티라고 부른다. JPA를 사용해서 테이블과 매핑할 클래스는 반드시 @Entity 필수! 주의사항 기본 생성자 필수 (파라미터가 없는 public 또는 protected) final 클래스, enum, interface, inner 클래스 사용할 수 없다. 저장할 필드에 final 키워드를 사용할 수 없다. 속성 name JPA에서 사용할 엔티티 이름 지정. 기본값 : 클래스 이름을 그대로 사용(예: Member) 같은 클래스..
JPA 에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping) 영속성 컨텍스트 JPA를 보통 쓰게되면, 엔티티 매니저 팩토리와 엔티티 매니저에 대해 이해를 해야한다. 예를 들면, 고객의 요청이 올 때마다 엔티티 팩토리를 통해 엔티티 매니저를 생성한다. 엔티티 매니저는 내부적으로 데이터 커넥션을 사용해서 데이터베이스를 사용하게 된다. ❓그럼 영속성 컨텍스트란 뭘까? 영속성 컨텍스트란? 엔티티를 영구 저장하는 환경 EntityManager.persist(entity); : DB에 저장한다기보다 영속성 컨텍스트를 통해 엔티티를 영속화 한다는 의미이다. → 영속성 컨텍스트에 엔티티를 저장한다. 영속성 컨텍스트는 논리적인 개념이고, 눈에 보이지 않는다. 엔티..
JPA 시작하기 프로젝트 생성 DB 설치하기 ⇒ 실습용으로는 간단하게 사용되고 웹상황에서 콘솔창도 볼 수 있는 H2를 사용한다. H2 설치 가이드는 링크 글을 참고한다. 프로젝트 생성하기 Java 8 이상(8권장) Maven 프로젝트 groupId: jpa-basic artifactId: ex1-hello-jpa version: 1.0.0 프로젝트 설정 : Maven pom.xml 우리가 나중에 사용할 스프링 부트 버전에 있는 org.hibernate 버전을 확인하고, 그에 맞게 바꿔주어야 한다. https://spring.io/projects/spring-boot#learn → Reference Doc 클릭, → a single HTML page 클릭 H2 데이터 베이스 버전도 변경 필요! 4.0.0 ..
❓왜 jpa를 써야 할까? : SQL 중심적인 개발의 문제점 현재의 애플리케이션 개발 언어 트렌드 → 객체 지향 언어(ex : [Java, Scala, ...]) 현재 데이터베이스 세계의 헤게모니 → 관계형 DB(ex : [Oracle, MySQL, ...]) → 개발자가 객체로 데이터를 가공해도 DB에 저장할 땐, 결국 SQL을 사용한다. → SQL 중심적인 개발 ! → 객체를 관계형 DB에 관리한다는 것이 문제 ! ❓무엇이 문제일까? 1. 무한 반복, 지루한 코드 기능하나 추가해서 테이블을 생성할 때마다 CRUD SQL을 다 만들어주어야 한다. → Jdbc, MyBatis가 매핑에 도움을 주기는 하지만 그래도 개발자가 다 짜야함! Example : 회원 객체를 만들고 DB에 CRUD를 하는 기능이 있..
스프링 컨테이너 ApplicationContext 기존 : 개발자가 AppConfig를 사용해서 직접 객체를 생성 & DI → 스프링 컨테이너 사용 @Configuration이 붙은 AppConfig를 설정(구성) 정보로 사용 : @Bean이라 적힌 메서드를 모두 호출 -> 반환된 객체를 스프링 컨테이너에 등록 스프링 빈 : @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용. 스프링 빈은 applicationContext.getBean() 메서드를 사용해서 찾을 수 O 스프링 컨테이너 생성 @Configuration public class AppConfig { @Bean public MemberService memberService() { //생성자 주입 return new MemberServi..
객체 지향 프로그래밍 컴퓨터 프로그램을 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있음. 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용 객체지향의 특징 추상화(Abstraction) : 여러 객체들의 공통적인 특징을 도출해 내는 것, 현실 객체를 추상화해서 클래스를 구성. 캡슐화(Encapsulation) : 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것, 데이터를 직접 노출시키지 않고 메서드를 이용해 보호. 상속(Inheritance) : 상위클래스의 속성을 하위클래스가 물려받는 것 다형성(Polymorphism) : 하나의 객체가 여러 형태를 가지는 것 다형성의 실세계 비..
Spring 단어의 의미스프링 DI 컨테이너 기술(Bean 관리 등)스프링 프레임워크스프링 부트, 스프링 프레임워크 등을 모두 포함한 Spring 생태계 Spring의 핵심 개념"자바 언어 기반의 프레임워크"객체지향 언어가 가진 강력한 특징을 살려내는 프레임워크좋은 객체 지향 어플리케이션을 개발할 수 있게 도와주는 프레임워크 Spring 특징자바 객체와 라이브러리들을 관리, Tomcat과 같은 Was가 내장되어 있어 자바 웹 어플리케이션을 구동할 수 있음경량 컨테이너로 자바 객체를 직접 Spring에서 관리: 객체의 생성및 소멸과 같은 생명주기(Life Cycle)을 관리하며, Spring 컨테이너에서 필요한 객체를 가져와서 사용제어의 역전(IOC, Inversion Of Control): 컨트롤의 제..