ERD다이어그램 작성
깃을 통한 기본 코드 공유
백앤드 팀원들 기능 분담.
값타입 컬랙션
말 그대로 값 타입을 컬렉션에 담아서 사용하는 것이다.
@OneToMany 처럼 엔티티를 컬렉션으로 사용하는 것이 아니라, Integer, String과 같은 값 타입을 컬렉션으로 사용하는 것이다.
관계형 데이터베이스는 컬렉션을 담을 수 없다. 따라서 이를 저장하기 위해서는 별도의 테이블을 만들어서 저장해야 한다.
이때 값 타입 컬렉션은 개념적으로 보면 1대 N 관계이다.
(그리고 값 타입을 저장하는 테이블은 값 타입을 소유한 엔티티의 기본 키와 모든 값 타입 필드를 묶어서 PK로 사용하며, 엔티티의 기본 키를 PK겸 FK로 사용한다.)
@ElementCollection
값 타입 컬렉션을 매핑할 때 사용한다.
위에서 말했듯이 관계형데이터베이스에는 컬렉션과 같은 형태의 데이터를 컬럼에 저장할 수 없기 때문에, 별도의 테이블을 생성하여 컬렉션을 관리해야하는데, 이때 해당 필드가 컬렉션 객체임을 JPA에게 알려주는 어노테이션이 @ElementCollection 이다.
@Entity가 아닌 Basic Type이나 Embeddable Class로 정의된 컬렉션을 테이블로 생성하며 One-To-Many 관계로 다룬다.
@Entity
public class Member {
@Id
@GeneratedValue
@Column(name = "member_id")
private Long id;
@Column
@ElementCollection
private List<String> profileImgUrl = new ArrayList<>();
}
:
create table member (
member_id bigint not null,
age integer,
name varchar(255),
tel_no varchar(255),
primary key (member_id)
) :
create table member_profileImgUrl (
member_member_id bigint not null,
roles varchar(255)
)
@ElementCollection 작동 원리.
부모 Entity 에 의해 관리된다.
member_profileImgUrl 에 member_id 와 관련된 키가 생성된 것을 볼 수 있다.
부모와 함께 저장되고 삭제된다. casecade 옵션이 default 이다.
컬렉션 값 변경 시, 전체 삭제 후 새로 추가한다.
member id 데이터 하나의 roles 가 변경되면 전체 삭제 후, 새로 추가한다.
@ElementCollection 사용시 유의점.
값 타입 컬렉션의 제약
값 타입은 엔티티와 다르게 식별자 개념이 없기 때문에 값을 변경하면 추적이 어렵다.
값 타입 컬렉션에 변경 사항(저장, 삭제)이 발생하면, 소유하는 엔티티와 연관된 모든 데이터를 삭제하고, 현재 남아있는 값을 모두 다시 저장한다.(예제에서는 삭제를 예로 들었지만, 저장도 마찬가지)
값 타입 컬렉션을 매핑하는 테이블은 모든 컬럼을 묶어서 기본키를 구성해야 함 → null 입력 X, 중복 저장 X
값 타입 컬렉션의 대안
참고: https://insanelysimple.tistory.com/350 [Simple is best:티스토리]
참고 : https://developer-hm.tistory.com/48
참고 : https://www.inflearn.com/course/ORM-JPA-Basic#
참고 : https://ttl-blog.tistory.com/121
오늘 mvp를 마지막으로정리하고 백앤드는 백앤드대로 프런트는 프런트 대로 나누어서 개발에 들어갔다.
백앤드는 ERD다이어그램을 먼저 작성하고 그다음 기능분담을 하여 개발에 들어갔는데, 오늘따라 왜이리 피곤하고 머리가 안돌아가는 지 머리가 자꾸 멍하고 다른 생각이 나서 코드에 집중 할 수 가없었다.
개발해야될 양은 엄청난데, 갑자기 피곤이 몰려오더니 더이상 코드에 집중하는 내눈을 가려버렸다.
그래도 집중해야지, 깨어봐야지 하고 밖에 나갔다 들어왔다를 하기를 수번 그래도 밖에 있으면 잠에서 깨는 느낌이지만 다시 돌아와서 의자에 앉기만하면 왜이렇게 잠이 쏟아지거나 아니면 다른 생각이 나는지..
결국 이상태로는 코드를 만들어도 실수 할 것 같고 특히 간단한 실수 일수록 눈에 보이기가 힘들어서 악순환이 계속 될 것 같아서 팀원들에게 미리 양해를 구하고 일찍 게더에서 나왔다.(정말 감사하게도 팀원들 모두가 고생하셨다고 말씀해 주셔서 약간의 죄책감은 덜 수 있었다.
마음속으로는 내일 열심히 해야지라고 되뇌였지만, 내일도 과연 열심히 아니, 잘할 수 있을까?????
두고온 팀원분들이 자꾸 생각나서 미안할 따름이다......