1. 상속 관계 매핑 관계형 DB는 상속 개념이 없다. - 슈퍼타입 서브타입 논리 모델을 실제 테이블로 구현하는 방법 각각의 테이블로 변환 : 모두 테이블로 만들고 조회할 때 조인을 사용(조인 전략) 통합 테이블로 변환 : 테이블을 하나만 사용해서 통합 (단일 테이블 전략) 서브타입 테이블로 변환 : 서브 타입마다 하나의 테이블을 만든다 (구현 클래스마다 테이블 전략) 조인 전략 기본키 + 외래 키로 사용하는 전략이다. 따라서 조회할 때 조인을 자주 사용한다. 하지만 테이블은 타입 개념이 없으므로 타입을 구분하는 컬럼을 추가해야 한다. ① : 상속 매핑은 부모 클래스에 @Inheritance를 사용한다. 그리고 매핑 전략을 지정해야 하는데 여기서는 조인 전략을 사용하므로 InheritanceType.JO..
1. 다대일 DB 테이블의 1 : N 관계에서 외래 키는 항상 다 쪽에 있다. 예를 들어 회원(N)과 팀(1)이 있으면 회원 쪽이 연관관계의 주인이다. 다대일 단방향 [N : 1] 다대일 단방향 연관관계이다. Member.team 필드로 회원 테이블의 TEAM_ID 외래 키를 관리한다. 다대일 양방향 [N : 1 , 1 : N] 실선이 주인이고 점선은 주인이 아니다. 양방향은 외래 키가 있는 쪽이 연관관계의 주인이다. 양방향 연관관계는 항상 서로를 참조해야 한다. 2. 일대다 일대다 관계는 엔티티를 하나 이상 참조할 수 있으므로 자바 컬렉션인 Collection, List, Set, Map 중에 하나를 사용해야 한다. 일대다 단방향 [1 : N] 일대다 단방향 관계를 매핑할 때는 @JoinColumn을 ..
1. 단방향 연관관계 ex) 다대일 단방향 관계 이해 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. - 객체 연관관계 회원 객체는 Member.team 필드로 팀 객체와 연관관계를 맺는다. 회원과 팀은 단방향 관계이다. 회원은 Member.team을 통해 팀을 알 수 있지만 반대로 팀은 회원을 알 수 없다. - 테이블 연관관계 회원 테이블은 TEAM_ID 외래 키로 팀 테이블과 연관관계를 맺는다. 회원과 팀은 양방향 관계이다. MEMBER테이블의 TEAM_ID 외래 키 하나로 MEMBER JOIN TEAM과 TEAM JOIN MEMBER 둘 다 가능하다. - 객체 연관관계와 테이블 연관관계의 가장 큰 차이 객체 간의 연관관계를 양방향으로 만들고 싶으면 반대편에서도..
엔티티 어노테이션 4가지 객체와 테이블 매핑 : @Entitiy, @Table 기본 키 매핑 : @Id 필드와 컬럼 매핑 : @Column 연관관계 매핑 : @ManyToOne, @JoinColumn 1. @Entity JPA를 사용하여 테이블과 매핑할 클래스는 @Entitiy어노테이션을 필수로 붙어야 한다. @Entity는 JPA가 관리하는 것 속성 기능 기본값 name JPA에서 사용할 엔티티 이름을 지정.보통 기본값인 클래스 이름 사용. 다른 패키지에 같은 이름의 엔티티 클래스가 생기지 않도록 주의 설정하지 않으면 클래스 이름 그대로 사용한다. -주의 사항 기본 생성자는 필수(public, protected) final 클래스, enum, interface, inner 클래스 사용 x 저장할 필드에..
엔티티 매니저는 엔티티를 CRUD 하는 등 엔티티와 관련된 모든 일을 처리한다. 개발자는 엔티티 매니저를 가상의 DB로 생각하면 된다. 1. 엔티티 매니저 팩토리와 엔티티 매니저 일반적으로 EntityManagerFactory는 하나만 생성한다. Persistence.createEntity~를 호출하면 밑의 정보를 바탕으로 emf를 생성한다. 이제부터 필요할 때마다 엔티티 매니저를 생성하면 된다. 엔티티 매니저 팩토리는 한 개만 만들어서 애플리케이션 전체에서 공유하도록 설계한다. 그리고 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하므로 서로 다른 스레드 간에 공유해도 되지만, 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 스레드 간에 절대 공유하면 안 된다. JPA..
1. 이클립스 설치와 프로젝트 불러오기 이클립스 설치 자바 애플리케이션을 동작하기 위한 이클립스 IDE를 설치하자. 2020-06 R | Eclipse Packages 444 MB 4,652 DOWNLOADS The Modeling package provides tools and runtimes for building model-based applications. You can use it to graphically design domain models, to leverage those models at design time by creating and editing dynamic instances, to collabo www.eclipse.org 예제 프로젝트 불러오기 이클립스에서 예제 프로젝트를 불러..
JPA는 자바 진영의 ORM 기술 표준이다. ORM이란? ORM은 이름 그대로 객체와 관계형 DB를 매핑한다는 뜻이다. ORM 프레임 워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다. 예를 들어 개발자가 객체를 저장할 때 INSERT SQL을 직접 작성하는 것이 아닌 객체를 마치 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장하면 된다. 그러면 ORM 프레임워크가 적절한 INSERT SQL을 생성해서 DB에 객체를 저장해준다. 객체 저장 ex)jpa.persist(member); //저장 객체 조회 ex) Member member = jpa.find(memberId); //조회 어느 정도 성숙한 객체지향 언어에는 대부분 ORM 프레임워크들이 있는데 단순히 객체 하나를 C..
애플리케이션이 발전하며 그 내부 복잡성도 증가, 그래서 현대의 복잡한 애플리케이션은 대부분 객체지향 언어로 개발한다. 문제는 도메인 모델을 저장할때 발생한다. 예를들어 회원 객체를 저장해야 하는데 회원 객체가 팀 객체를 참조하고 있다면, 회원 객체를 저장할 때 팀 객체도 함께 저장해야 한다. 단순히 회원 객체만 저장하면 참조하는 팀 객체를 잃어버리는 문제를 발생한다. 현실적인 대안은 관계형 DB에 객체를 저장하는 것인데, 객체와 관계형 DB는 지향하는 목적이 서로 다르므로 둘의 기능과 표현 방법도 다르다. 이것을 객체와 관계형 DB의 패러다임 불일치 문제라 한다. 따라서 객체 구조를 테이블 구조에 저장하는 데는 한계가 발생한다. 1.상속 객체는 상속이라는 기능을 갖고 있지만 테이블은 상속 기능이 없다. ..
들어가기 앞서 JPA 게시글은 위의 책을 정리하여 만들었다. 1. JPA 소개 JPA를 쓰는 이유 지루하고 반복적인 CRUD SQL을 알아서 처리 객체 모델링과 관계형 DB 사이의 차이점도 해결 JPA는 실행 시점에 자동으로 SQL을 만들어 실행(개발자는 SQL을 직접 작성하는 것이 아닌 어떤 SQL이 실행될지 생각만 하면 됨) JPA의 장점 애플리케이션을 객체 중심으로 개발하니 생산성, 유지보수 상승 코드 수가 줄어들어 가독성 향상 테스트가 편리 데이터베이스 변경시 손쉽게 수정 가능 SQL을 직접 다룰 때 발생하는 문제점 1. 반복, 반복 그리고 반복 객체를 DB에 CRUD하려면 많은 SQL과 JDBC API를 코드로 작성해야 한다는 점 테이블마다 비슷한 일을 반복해야 하는데, 개발하려는 애플리케이션에..
1. 이산수학 개요 이산수학(Discrete Mathematics) 개념 컴퓨터를 위한 수학 참과 거짓으로 살펴보는 컴퓨터 수학 이산수학을 배우는 이유 이산수학이란 불연속적인 숫자를 다루는 수학이다. 컴퓨터 내부적으로 0과 1만을 다루는 데 그러한 불연속적인 데이터 흐름을 다루기에 적합한 수학적 사고를 배양하는데 필수적인 강의라고 할 수 있다. 또한 이산수학에서는 다루는 내용이 자료구조, 알고리즘 등의 베이스가 되어 전체적인 컴퓨팅 사고력을 길러줄 것이다. 그리고 추후 수학적 귀납법 등의 다양한 기초 개념이 알고리즘에 반복적으로 출현하기 때문에 컴퓨터 과학의 베이스 학문 이라고 할 수 있다. 2. 명제 명제 (Proposition) 개념 진실 혹은 거짓을 말한다. 참(True)이나 거짓(False)으로 ..