Spring Model
-
이번 시간에는 Spring Data project에 대해 살펴보자.Spring Data Spring Data란?https://spring.io/projects/spring-dataSpring Data는 전통적인 데이터 저장소에 대한 사용 특성을 유지하면서 여러 형태의 데이터 저장소를 활용하기 위한 프로젝트이다.프로그램에서 데이터를 영속적으로 저장하기 위해 과거에는 주로 관계형 데이터베이스를 많이 사용했고 데이터를 관리하기 위해 JDBC 기반의 기술들이 발전했지만 최근에는 비 관계형 데이터베이스, 맵 리듀스 프레임워크, 클라우드 기반 서비스들이 많이 등장했다. Spring Data는 다양한 데이터 저장소에 접근하는 다양한 기술들을 포함하는 포괄적인 프로젝트이다.Spring Data를 사용하면 MySql ..
02. Spring Data와 Spring Data JPA이번 시간에는 Spring Data project에 대해 살펴보자.Spring Data Spring Data란?https://spring.io/projects/spring-dataSpring Data는 전통적인 데이터 저장소에 대한 사용 특성을 유지하면서 여러 형태의 데이터 저장소를 활용하기 위한 프로젝트이다.프로그램에서 데이터를 영속적으로 저장하기 위해 과거에는 주로 관계형 데이터베이스를 많이 사용했고 데이터를 관리하기 위해 JDBC 기반의 기술들이 발전했지만 최근에는 비 관계형 데이터베이스, 맵 리듀스 프레임워크, 클라우드 기반 서비스들이 많이 등장했다. Spring Data는 다양한 데이터 저장소에 접근하는 다양한 기술들을 포함하는 포괄적인 프로젝트이다.Spring Data를 사용하면 MySql ..
2020.06.22 -
게시글의 번호처럼 자동으로 증가하는 컬럼을 위해서는 sequence를 사용하거나 auto_increment 속성을 이용한다. 이번 포스트에서는 이렇게 자동으로 생성되는 키를 매핑하는 방법에 대해 알아보자. @Id의 자동 키 매핑 전략일반적으로 식별자 컬럼(P.K)은 일반 컬럼이 아닌 자동 생성되는 대리키를 이용하는 경우가 많다. 이는 고유성이 쉽게 보장되고 인덱스 성능을 향상시키는 등의 장점이 있기 때문이다. 게시글의 번호나 회원의 번호등은 아주 좋은 예이다. 이런 자동 생성 대리키를 이용하기 위해서 Sequence를 사용하거나 auto_increment 속성을 이용할 수 있다.JPA에서는 자동으로 증가하는 P.K를 설정하기 위해 @GeneratedValue를 사용한다.@GeneratedValue@Gen..
04.자동 키 매핑 전략게시글의 번호처럼 자동으로 증가하는 컬럼을 위해서는 sequence를 사용하거나 auto_increment 속성을 이용한다. 이번 포스트에서는 이렇게 자동으로 생성되는 키를 매핑하는 방법에 대해 알아보자. @Id의 자동 키 매핑 전략일반적으로 식별자 컬럼(P.K)은 일반 컬럼이 아닌 자동 생성되는 대리키를 이용하는 경우가 많다. 이는 고유성이 쉽게 보장되고 인덱스 성능을 향상시키는 등의 장점이 있기 때문이다. 게시글의 번호나 회원의 번호등은 아주 좋은 예이다. 이런 자동 생성 대리키를 이용하기 위해서 Sequence를 사용하거나 auto_increment 속성을 이용할 수 있다.JPA에서는 자동으로 증가하는 P.K를 설정하기 위해 @GeneratedValue를 사용한다.@GeneratedValue@Gen..
2020.06.07 -
이번 포스트에서는 JPA에서 사용되는 데이터 타입의 종류에 대해 알아보자.데이터 타입JPA는 크게 Entity 타입과 Value 타입 2가지 데이터 타입을 지원한다.타입설명Entity 타입@Entity로 선언된 객체의 타입Value 타입Entity의 구성 요소로 단순히 값으로 사용되는 타입 - Basic 타입: 기본형 및 Wrapper 타입, String - Embedded 타입: 복합 값 타입으로 별도의 클래스로 구성(ex: Address, Phone, Email, ...) - Collection 값 타입: 여러 가지 내용을 가지는 타입Value 타입 중 Basic 타입이야 별 특별한 내용이 없고 여기서는 약간 생소한 Embedded 타입과 Collection에 대해 알아보자. Embedded 타입 E..
03. Value Type이번 포스트에서는 JPA에서 사용되는 데이터 타입의 종류에 대해 알아보자.데이터 타입JPA는 크게 Entity 타입과 Value 타입 2가지 데이터 타입을 지원한다.타입설명Entity 타입@Entity로 선언된 객체의 타입Value 타입Entity의 구성 요소로 단순히 값으로 사용되는 타입 - Basic 타입: 기본형 및 Wrapper 타입, String - Embedded 타입: 복합 값 타입으로 별도의 클래스로 구성(ex: Address, Phone, Email, ...) - Collection 값 타입: 여러 가지 내용을 가지는 타입Value 타입 중 Basic 타입이야 별 특별한 내용이 없고 여기서는 약간 생소한 Embedded 타입과 Collection에 대해 알아보자. Embedded 타입 E..
2020.06.07 -
이번 시간에는 CASCADE 옵션을 이용한 영속성 전이와 고아객체의 관리에 대해 살펴보자. Cascade 옵션을 이용한 영속성 전이 영속성 전이?영속성 전이란 특정 entity의 영속 상태를 변경할 때 연된된 entity의 영속 상태도 함께 변경하는 것을 의미한다. 앞서 살펴봤던 Attachment, Post, Member의 관계를 생각해보자.ERD를 살펴보면 Attachment는 Post의 P.K인 pno를 post로 참조하고 있다. 따라서 DB 입장에서 Attachment에 데이터를 저장하려면 먼저 Post에 데이터가 있어야 한다. 또한 Post를 삭제하기 위해서 먼저 Attachment에서 대상 Post를 참조하는 데이터를 먼저 지워야 한다. 이에 따라 관련 동작을 위해서는 아래와 같이 장황한 코드..
06. 연관 관계의 관리 - 영속성 전이와 고아객체 관리이번 시간에는 CASCADE 옵션을 이용한 영속성 전이와 고아객체의 관리에 대해 살펴보자. Cascade 옵션을 이용한 영속성 전이 영속성 전이?영속성 전이란 특정 entity의 영속 상태를 변경할 때 연된된 entity의 영속 상태도 함께 변경하는 것을 의미한다. 앞서 살펴봤던 Attachment, Post, Member의 관계를 생각해보자.ERD를 살펴보면 Attachment는 Post의 P.K인 pno를 post로 참조하고 있다. 따라서 DB 입장에서 Attachment에 데이터를 저장하려면 먼저 Post에 데이터가 있어야 한다. 또한 Post를 삭제하기 위해서 먼저 Attachment에서 대상 Post를 참조하는 데이터를 먼저 지워야 한다. 이에 따라 관련 동작을 위해서는 아래와 같이 장황한 코드..
2020.06.06 -
이번 시간에는 관계를 나타내는 애너테이선들이 공통적으로 가지는 fetch 속성을 살펴보자. 관계에 따른 로딩 시점 결정 관계 설정과 fetch 속성fetch는 DB에서 연관관계 엔티티를 실제로 조회해서 가져오는 것 즉 select 시점을 결정하는 속성으로 FetchType이라는 enum 타입으로 선언되어있다.fetch 속성내용기본 적용FetchType.EAGER(열렬한)즉시 로딩 - 엔티티 조회 시 join을 이용해 연관 관계 엔티티까지 한번에 조회, 영속화 - 연관된 엔티티가 하나인 경우(가져올게 적다) - @ManyToOne, @OneToOneFetchType.LAZY(게으른)지연 로딩 - 엔티티 조회 시 대상 엔티티만 조회, 연관 관계 엔티티는 조회하지 않음 - 연관 관계 엔티티는 필요한(사용하는..
05. 연관 관계 관리 - fetch 속성이번 시간에는 관계를 나타내는 애너테이선들이 공통적으로 가지는 fetch 속성을 살펴보자. 관계에 따른 로딩 시점 결정 관계 설정과 fetch 속성fetch는 DB에서 연관관계 엔티티를 실제로 조회해서 가져오는 것 즉 select 시점을 결정하는 속성으로 FetchType이라는 enum 타입으로 선언되어있다.fetch 속성내용기본 적용FetchType.EAGER(열렬한)즉시 로딩 - 엔티티 조회 시 join을 이용해 연관 관계 엔티티까지 한번에 조회, 영속화 - 연관된 엔티티가 하나인 경우(가져올게 적다) - @ManyToOne, @OneToOneFetchType.LAZY(게으른)지연 로딩 - 엔티티 조회 시 대상 엔티티만 조회, 연관 관계 엔티티는 조회하지 않음 - 연관 관계 엔티티는 필요한(사용하는..
2020.06.05 -
이번 시간에는 M:N 관계의 처리에 대해 살펴보자. M:N의 관계 처리 M:N의 관계M:N 관계는 양측 모두가 여러 개의 관계를 가지는 경우이다. 예를 들어 게시글과 카테고리를 생각해보면 게시글 하나가 여러 카테고리에 속해있을 수 있고 하나의 카테고리에는 여러 개의 게시글이 있을 수 있다.일반적으로 DB에서는 이런 상황을 처리하기 위해 중간에 연계 테이블을 만들어서 N:1 관계로 풀어서 처리하는 것이 일반적이다.https://goodteacher.tistory.com/466/#comment18561464 [DB] 다대다 관계의 문제점과 해결이번 포스트에서는 다대다 관계의 문제점과 해결 방법에 대해서 살펴보자. 다대다 관계다대다 관계의 예DB 모델링 과정에서 다대다 관계가 나올 수 있다. 쉽게 생각할 ..
04. 연관 관계 - M:N 관계이번 시간에는 M:N 관계의 처리에 대해 살펴보자. M:N의 관계 처리 M:N의 관계M:N 관계는 양측 모두가 여러 개의 관계를 가지는 경우이다. 예를 들어 게시글과 카테고리를 생각해보면 게시글 하나가 여러 카테고리에 속해있을 수 있고 하나의 카테고리에는 여러 개의 게시글이 있을 수 있다.일반적으로 DB에서는 이런 상황을 처리하기 위해 중간에 연계 테이블을 만들어서 N:1 관계로 풀어서 처리하는 것이 일반적이다.https://goodteacher.tistory.com/466/#comment18561464 [DB] 다대다 관계의 문제점과 해결이번 포스트에서는 다대다 관계의 문제점과 해결 방법에 대해서 살펴보자. 다대다 관계다대다 관계의 예DB 모델링 과정에서 다대다 관계가 나올 수 있다. 쉽게 생각할 ..
2020.06.04 -
이번 시간에는 1:1 연관관계 처리에 대해 살펴보자.1:1 연관관계 처리 1:1 연관관계여기서는 Post와 Attachment의 관계를 다룬다. 우리 시나리오에서는 게시글 하나에 첨부파일은 하나만 가능하다고 하자. 따라서 Post와 Attachment는 1:1의 관계가 된다. 1:1 관계의 특징과 처리 방법을 살펴보자.일반적으로 DB에서 1:1 관계를 처리하기 위해서는 보조테이블(Attachment)에 F.K를 설정하고 관계의 소유자로 만든다. 보조테이블(Attachment)에는 데이터가 없을 수 있지만 주테이블(Post)에는 데이터가 없을 수 있기 때문이다. 아무튼 F.K를 이용하면 join을 이용해서 서로를 탐색할 수 있다.JPA에서는 @OneToOne을 이용해서 1:1 관계를 처리한다. @OneTo..
03. 연관 관계 - 1:1 관계이번 시간에는 1:1 연관관계 처리에 대해 살펴보자.1:1 연관관계 처리 1:1 연관관계여기서는 Post와 Attachment의 관계를 다룬다. 우리 시나리오에서는 게시글 하나에 첨부파일은 하나만 가능하다고 하자. 따라서 Post와 Attachment는 1:1의 관계가 된다. 1:1 관계의 특징과 처리 방법을 살펴보자.일반적으로 DB에서 1:1 관계를 처리하기 위해서는 보조테이블(Attachment)에 F.K를 설정하고 관계의 소유자로 만든다. 보조테이블(Attachment)에는 데이터가 없을 수 있지만 주테이블(Post)에는 데이터가 없을 수 있기 때문이다. 아무튼 F.K를 이용하면 join을 이용해서 서로를 탐색할 수 있다.JPA에서는 @OneToOne을 이용해서 1:1 관계를 처리한다. @OneTo..
2020.06.04 -
이번 시간에는 N:1 양방향 관계에 대해 살펴보자.N:1의 양방향관계 매핑 @OneToMany앞서 살펴봤던 @ManyToOne은 N:1의 단방향 관계만 처리 가능할 뿐 양방향으로는 처리할 수가 없었다. DB 처럼 양방향 처리를 위해서는 어떤것이 추가로 필요할까?N:1의 반대 방향인 1:N을 설정하기 위해서는 @OneToMany를 사용한다.@Target({METHOD, FIELD})public @interface OneToMany { String mappedBy() default ""; // 관계를 소유한 객체의 필드 CascadeType[] cascade() default {}; // 연관객체에 대한 동시 처리 설정 FetchType fetch() ..
02. 연관 관계 - N:1 양방향 관계 처리이번 시간에는 N:1 양방향 관계에 대해 살펴보자.N:1의 양방향관계 매핑 @OneToMany앞서 살펴봤던 @ManyToOne은 N:1의 단방향 관계만 처리 가능할 뿐 양방향으로는 처리할 수가 없었다. DB 처럼 양방향 처리를 위해서는 어떤것이 추가로 필요할까?N:1의 반대 방향인 1:N을 설정하기 위해서는 @OneToMany를 사용한다.@Target({METHOD, FIELD})public @interface OneToMany { String mappedBy() default ""; // 관계를 소유한 객체의 필드 CascadeType[] cascade() default {}; // 연관객체에 대한 동시 처리 설정 FetchType fetch() ..
2020.06.04