블록타임리프자체태그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..
엔티티 매핑 어노테이션@Entity, @Table: 객체와 테이블 매핑@Column: 필드와 컬럼 매핑@Id: 기본 키 매핑@ManyToOne, @JoinColumn, ...: 연관관계 매핑@EntityJPA가 관리하는 클래스, 엔티티라 합니다. Table과 직접적으로 매핑되는 클래스주의기본 생성자 필수(public 또는 protected 생성자)final, enum, interface, inner 클래스 사용 금지저장할 필드에 final 사용 금지final 클래스와 필드 사용 제한JPA에 프록시를 사용해서 런타임에 동적 프록시를 생성하여 지연 로딩(Lazy Loading)을 지원하는데, final 키워드는 상속, 오버라이드를 제한하기 때문에 JPA에서 프록시로 클래스를 생성하는 것을 막습니다.Enum ..
플러시란?영속성 컨텍스트의 변경내용을 데이터베이스에 반영 영속성 컨텍스트의 쓰기 지연 SQL 저장소에 있던 SQL을 데이터베이스에 반영데이터 베이스 트랜잭션이 commit되면 자동적으로 flush()가 발동한다.그렇다면 flush()가 발동하면 어떤 일이 일어날까?변경감지수정된 엔티티 쓰기 지연 SQL 저장소에 등록쓰기 지연 SQL 저장소의 쿼릴르 데이터베이스에 전송(등록, 수정, 삭제 쿼리)영속성 컨텍스트 플러시하는 방법em.flush() - 직접 호출(거의 사용할 일이 없다)트랜잭션 커밋 - 플러시 자동 호출JPQL 쿼리 실행 - 플러시 자동 호출em.flush()em.persist()해도 DB에 쿼리가 날라가지 않는다 하지만 먼저 SQL을 보고싶은 경우에 사용 가능Member member = new..