[QueryDSL] 동적 쿼리를 적용해 다중 조건 조회하는 과정 기록
·
Database/JPA
요구사항검색 조건은 [제목, 날짜 기간, 매니저] 이렇게 3가지였고, 날짜 기간은 startedAt과 endedAt으로 구분했다.\1. 제목이 조건으로 들어오면 제목에 '포함되는' 글을 조회한다.2. 날짜가 조건으로 들어오면 '작성된 글'이 해당 기간 안에 있는 글을 조회한다.3. 매니저가 조건으로 들어오면 '글을 관리하는 매니저가 포함된 글'을 조회한다.  구현: 조건 별로 method를 모두 구현Controller @GetMapping("/search/todos") public ResponseEntity> searchTodo(@RequestParam(defaultValue = "1") int page, ..
[SpringBoot/JPA] 조회 성능 개선하기 - FULLTEXT Index 사용
·
Database/JPA
부트캠프 과제 구현 중 기록100만 건의 데이터를 생성해 저장하고, 목록을 조회 하기목록 조회 시 성능을 개선하기 위한 방법 기록대용량 데이터 생성 후 저장: https://rvrlo.tistory.com/entry/SpringBootJPA-JDBC-Batch-Insert를-통해-대용량-데이터-저장하기      🔎 과제 분석저번 글에서 대용량 데이터를 생성하여 테이블에 저장했으니, 이번에는 조회 성능을 개선해보기로 한다.조회 속도를 개선하기 위해 여러 방법을 고려해보라고 했고, 제일 먼저 떠오른 것은 인덱스를 이용하는 것이었다.   ✨ MySQL - Searchall, index: 테이블 전체 스캔(인덱스x)range: 인덱스를 사용한 범위 검색fulltext: MATCH .. AGAINST 구문을 사..
[SpringBoot/JPA] JDBC Batch Insert를 통해 대용량 데이터 저장하기
·
Database/JPA
부트캠프 과제 구현 중 기록100만 건의 데이터를 생성해 저장하고, 목록을 조회 하기대용량 데이터를 저장하기 위한 방법 기록데이터 조회 성능 개선: https://rvrlo.tistory.com/entry/SpringBootJPA-조회-성능-개선하기-FULLTEXT-Index-사용      🔎 과제 분석100만 건의 데이터를 저장하기 위해 랜덤한 값을 생성해야 했다.먼저 목표인 users 테이블은 pk인 id와 unique로 지정된 email이 존재한다.id는 auto_increment로 지정되어 상관없지만, 공통된 값이 나오면 곤란할 email을 랜덤하게 생성해야 했다. 그리고 과제에 주어진 조건은 → 닉네임은 랜덤으로 지정하고, 동일한 닉네임이 들어가지 않도록 하는 것  결국 email과 nickn..
[SQL] ERD와 UML의 관계(Relationship) 차이
·
Database/basic
✔️ ERD의 관계1. 존재에 의한 관계 (존재적 관계)먼저 erd에서 말하는 '존재적 관계'는 말 그대로 '존재를 통해서 이루어지는 관계'를 의미한다. 한 쇼핑몰의 Category에 Books, Pens, Cosmetics 등이 존재한다.Books에는 Humanity, IT, Science 등이 존재하고, Cosmetics에는 Cream, Toner, Aftershave 등이 존재한다. 이런 단순한 존재로 인하여 관계가 형성되는 경우에는 존재적 관계라고 말한다.  2. 행위에 의한 관계 (행위적 관계)'어떤 행위를 통해서 생기는 관계'를 '행위적 관계'라고 하는데, 어떠한 행동 상태를 의미한다. Adam이라는 고객이 Books카테고리에 있는 책 한 권을 구입했다.Adam과 Books 사이에는 '구입하다..
[JPA] persist(), flush() 그리고 commit() 어떻게 DB에 반영될까?
·
Database/JPA
영속성[명사] 영원히 계속되는 성질이나 능력.- 국립국어원 표준국어대사전  영속성 컨텍스트 Persistence ContextEntity 객체를 영속성 상태로 관리하는 공간.자바에서 작성된 Obejct를 DB Table에 저장하기 위해 사용한다.  JPA를 공부할 때 만나는 '영속'이라는 말이 있다.영속 상태로 둔다, 영속을 시킨다, 영속성 컨텍스트에 저장한다 … 등등 '영속성'이라는 말은 영원히 계속되는 성질이나 능력이라는 의미를 가지고 있다.말 그대로 DB와 동기화하여 오래 지속 되도록 하는 것이다.   ✔️EntityManagerEntityManager를 통해서 Persistence Context에 접근할 수 있다.EntityManager를 사용하는 방법에 대한 설명 글이 아니니 사용하는 방법은 다..
[MySQL] 데이터 조작어 DML의 SELECT 기본 사용법
·
Database/MySQL
데이터 조작어 DMLDML; Data Manipulation LanguageDDL은 테이블 자체를 생성하거나 수정하는 등 테이블을 관리하기 위해 사용하는 언어였다면DML은 그 테이블 안에 있는 데이터 즉, 튜플·어트리뷰트와 같은 값을 관리한다. INSERT, UPDATE, DELETE, SELECT를 사용하는데 데이터베이스 4대 요소 CRUD를 구현한다.C = Create → INSERTR = Read → SELECTU = Update → UPDATED = Delete → DELETE 그 중 가장 많이 사용하게 될 데이터를 검색하는 SELECT의 기본 문법에 대해서 알아볼 수 있다.   SELECT 구성 SELECT [ ADD | DISTINCT ] {속성}FROM {테이블}[WHERE][GROUP BY..
[MySQL] ALTER TABLE의 ADD와 DROP
·
Database/MySQL
데이터 정의어 DDLDDL; Data Definition Language생성, 변경, 삭제 등 데이터베이스 구조를 정의한다. ALTER TABLE테이블의 구조를 변경할 때 사용하는 ALTER TABLE 명령어. ADD, DROP, MODIFY, CHANGE, RENAME 속성을 추가, 삭제, 수정을 할 수 있다. add와 drop을 통해서 속성와 제약조건을 추가, 삭제하는 방법을 알아보고자 한다.  ADD 속성 추가ALTER TABLE 테이블 ADD 속성 타입 [NOT NULL] [DEFAULT 기본값];add와 함께 추가할 속성을 지정한다.alter table guest add phone int;     DROP 속성 삭제ALTER TABLE 테이블 DROP COLUMN 속성;속성은 하나의 열 → Co..
[MySQL] 데이터 정의어 DDL의 CREATE
·
Database/MySQL
데이터 정의어 DDLDDL; Data Definition Language생성, 변경, 삭제 등 데이터베이스 구조를 정의한다. 생성 CREATECREATE 명령어를 통해서 DATABASE와 TABLE을 생성할 수 있다.테이블 생성 방법과 각 제약조건에 대해 알아보자.  CREATE DATABASE데이터베이스를 생성. 테이블 생성 전에 실행하는 단계로 데이터베이스는 여러 테이블을 포함하는 큰 틀. CREATE TABLE테이블을 생성. 데이터베이스 위에 올라가는 실제 값이 저장되는 테이블. 릴레이션이라고 부르기도 한다. 속성이름 데이터타입 [제약조건]속성1 INT NOT NULL;테이블 생성 후 속성 생성은 위처럼 진행된다.INT타입의 속성1 이라는 이름의 Attribute를 생성하고, NULL값이 오면 안 ..
[DB] 데이터 분류
·
Database/basic
구조화 형태로 분류 1. 정형 데이터 structured data 미리 정해진 구조에 따라 저장된 구조화된 데이터. 구조를 만들어 안에 데이터를 저장한다. 일반적으로 테이블 형태로 나타나며, 열 column은 데이터 유형에 따라 정의, 행 row은 실제 데이터를 포함한다. 특징 데이터 분석, 처리가 용이 데이터베이스를 통해 저장, 관리, 검색이 가능 데이터 무결성 Integrity 유지 → 데이터 품질 향상 2. 반 정형 데이터 semi-structured data 구조를 가지고 있지 않다. 하지만 일부 구조화된 정보를 가지고 있다. 데이터 내용 안에 구조에 대한 설명이 함께 존재한다. 데이터 구조를 파악하기 위한 parsing 과정이 필요하다. parsing 파싱 반 정형 데이터에서 필요한 정보를 추출..