이전 포스팅의 단방향 연관관계에서 더 발전시켜서 양방향으로 만들어보겠습니다.모든 코드는 Github에 올라와 있습니다.양방향 연관관계두 엔티티가 서로를 참조하는 관계 회원과 팀 예시회원과 팀이 있다.회원은 하나의 팀에 소속된다.하나의 팀은 여러 회원을 가지고 있다.Member와 Team을 양방향 연관관계로 만들어도 DB입장에서는 Table 변화가 없습니다.DB에서는 Foreign Key를 가지고 Join 해서 데이터를 가지고 오기 때문에 A, B 테이블 상관없이 한쪽에만 Foreing Key가 있으면 됩니다.MemberMember 엔티티는 단방향 연관관계 와 차이가 없습니다....@Entity public class Member { @Id @GeneratedValue(strategy = Genera..
모든 코드는 Github에 올라와 있습니다.단방향 연관관계 A엔티티가 B엔티티를 참조하지만 B엔티티는 A엔티티를 참조하지 않는 경우 엔티티의 참조가 한쪽 방향으로만 있는 경우 회원과 팀 예시로 알아보기회원과 팀이 있다.회원은 팀을 참조지만, 팀은 회원을 참조하지 않는다.회원과 팀은 다대일 관계다.객체지향에서는 객체가 다른 객체의 참조를 가지고 있으므로 자유롭게 객체 간 탐색을 할 수 있습니다. Member Member에서 Team의 id를 가지고 있는 것이 아니라 Team의 참조를 가지고 있습니다.... @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "MEMBER_ID") pri..
블록타임리프자체태그th:block 타임리프의 유일한 자체 태그개발자가 원하는 속성을 지정할 수 있는 단순한 속성 컨테이너로 속성을 실행한 다음 블록을 사라지게 만들지만 속성은 그대로 남아있다. 예를 들어, 사용자 이름과 나이를 같은 열에 두고 요약을 다른 열에 두고 싶을 때 사용할 수 있습니다. th:block이 없었다면 사용자 나이를 출력하는 th:text에서는 ${user.age}를 사용하지 못했을 것이다.📚자바스크립트 인라인자바스크립트 인라인사용법 : th:inline="javascript" 명시적으로 활성화..
연산주의사항 = 같은 비교 연산의 경우 주의해서 사용해야 한다.gt, lt, ge 같은 문자로 사용하는 경우 문자 그대로 출력이 될 수 있다. 기본적으로 사칙연산의 경우 다른 프로그래밍 언어와 똑같다. Elvis 연산: 삼항연산자의 편의 버전?: --> 데이터가 있다면 data가, 없다면 데이터 없음 이 출력된다.No-Operation_ (언더바) : 타임리프가 실행되지 않는 것처럼 동작한다.데이터 없음 --> 데이터가 있다면 data를 출력하고, 없다면 안에 있는 데이터 없음을 출력한다.속성 값 설정th:* 같은 타임리프의 태그 속성HTML태그 내에서 th:*을 통해서 속성을 지정하고 기존의 태그 속성을 대체한다.BasicController@GetMapping("/attribute") public S..
B-Tree 구조매우 중요한 자료 구조 중 하나, 데이터베이스와 파일 시스템에서 자주 사용된다.균형 이진 탐색 트리(Binary Search Tree)의 일반화된 형태로, 노드가 다수의 자식을 가질 수 있어 데이터의 삽입, 삭제, 검색이 효율적으로 이루어집니다.이진 탐색 트리(BST)노드의 개수가 최대 2개까지 가질 수 있다.모든 노드의 왼쪽 서브 트리는 해당 노드의 값보다 작은 값들만 가지고 오른쪽 서브 트리는 해당 노드의 값보다 큰 값들만 가진다.B-Tree의 파라미터M : 각 노드의 최대 자녀 노드 수(가장 중요한 파라미터)최대 M개의 자녀를 가질 수 있는 B tree를 M차 B tree라 부른다.M-1 : 각 노드의 최대 Key 수⌈M/2⌉ : 각 노드의 최소 자녀 노드수⌈ ⌉ -> 올림 기호만약..
인덱스테이블의 데이터에 대한 검색 성능을 향상하기 위해 사용되는 구조빠르게 정렬 그룹핑하기 위해 사용 특정 열(또는 열들)에 대한 데이터를 정렬된 형태로 저장하여 빠른 검색을 가능하게 합니다. 책의 색인처럼 작동, 데이터 검색 시에 Full Scan을 하지 않고 빠르게 접근할 수 있게 합니다.구조B-Tree해시 테이블 구조Index를 쓰는 이유특정 조건을 만족하는 데이터를 빠르게 조회하기 위해서 사용합니다.아래 코드에서 SELECT, DELETE, JOIN등에서 WHERE나 ON에서 데이터를 빠르게 조회하기 위해 Index를 사용합니다.SELECT * FROM customer WHERE first_name = 'Minsoo';DELETE FROM logs WHERE log_datatime Index 생성..
기본 키 매핑 어노테이션@Id@GeneratedValueIDENTITY 전략 - 특징기본 키 생성을 데이터베이스에 위임주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후 ID값을 알 수 있음IDENTITY 전략은 em.persist() 시점에 즉시 INSERT SQL 실행하고 DB에서 식별자를 조회SEQUENCE 전략 - 특징데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트(예: 오라클 시퀀스)오라클, PostgreSQL, DB2, H2 데이터베이스에서 사용SEQUENCE - @SequenceGenerator주의 : ..
자바와 DB의 데이터 타입이 다른 것들이 있기 때문에 이 데이터를 어노테이션을 사용해서 맞춰줘야 합니다.매핑 어노테이션어노테이션설명@Column컬럼 매핑@Temporal날짜 타입 매핑@Enumeratedenum 타입 매핑@LobBLOB, CLOB 매핑@Transient특정 필드를 컬럼에서 제외@Column객체 필드와 테이블 컬럼 매핑에 사용속성설명기본값name필드와 매핑할 테이블의 컬럼 이름객체 필드명insertableupdatable등록, 변경 가능 여부를 설정TRUEnullable(DDL)null값의 허용 여부를 설정, false 설정시 not null unique(DDL)@Table의 uniqueConstraints과 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다. columnDefin..
JPA가 매핑 정보를 보고 애플리케이션 로딩 시점에 자동으로 DB스키마를 생성하고 테이블에 데이터를 알아서 넣는다.데이터베이스 스키마 자동 생성속성설명create기존의 테이블이 존재하면 삭제하고 생성create-dropcreate와 같지만 마지막에 table을 삭제update엔티티와 매핑 테이블이 없다면 생성, 테이블이 있다면 컬럼을 변경validate엔티티 클래스와 테이블이 정상 매핑되는지만 검사none(default)아무 설정도 안함사용법persistence.xml ... ... application.propertiesspring.jpa.hibernate.ddl-auto=옵션applicat..