데이터베이스
-
[MySQL] 인덱스(Index)란? - 인덱스 생성 방법과 주의 사항데이터베이스 2022. 8. 11. 18:03
1. 인덱스란 무엇인가 인덱스(Index)란 데이터베이스에 저장된 데이터를 빠르고 효율적으로 찾고자 만들어진 데이터 구조입니다. 인덱스를 직관적으로 이해하기 가장 쉬운 방법은 책을 예로 드는 것입니다. 예를 들어 천만건의 데이터로 구성된 책이 하나 있고 그 안에서 특정 단어를 찾아야한다면 어떻게 해야할까요 책의 첫 장부터 훑어서 찾아보는 방법도 있겠지만 책의 두께가 두꺼워질 수록 검색할 분량이 기하급수적으로 늘어나면서 검색 속도가 급격히 느려질 것입니다. 그래서 아마 대부분의 사람들은 책 맨 뒷장에 를 볼 것입니다. 가나다 순서로 정렬된 는 그 옆에 단어가 위치한 페이지 번호가 적혀있어서 그 페이지를 펼치면 원하는 데이터를 바로 찾을 수 있을 것입니다. '폭포수' 라는 단어는 101페이지에 있고 '프로그..
-
[SQL] INNER JOIN과 OUTER JOIN에 대해서 알아보자!데이터베이스 2022. 8. 5. 11:26
조인이란? 조인(JOIN)이란 두 개 이상의 테이블으 서로 묶어서 하나의 결과 집합(테이블)을 만들어 내는 것을 말합니다. 1. 내부조인(INNER JOIN) 1-1. 내부조인(Inner Join) INNER JOIN은 조인 중에서 가장 많이 사용되는 조인입니다. 보통 JOIN이라하면 INNER JOIN을 지칭하는 것입니다. INNER JOIN은 조건을 사용하여 두 테이블의 레코드를 결합합니다. 예제 테이블) 각 아이가 하나의 장난감만을 가지고 있다. 일대일 관계이며 toy_id가 참조키 boys toys boy_id boy toy_id toy_id toy 1 Davey 3 1 hula hoop 2 Bobby 5 2 balsa gilder 3 Beaver 2 3 toy soldiers 4 Richie 1..
-
[redis] Redis 서버 Master/Slave 설정하기 (windows10)데이터베이스 2022. 8. 4. 11:55
redis는 마스터/슬레이브 형태의 복제 모델을 제공합니다. 이를 통해서 마스터의 변경이 슬레이브로 전파됩니다. 한 대의 슬레이브는 오직 하나의 마스터만 가질 수 있습니다. redis의 마스터/슬레이브 설정은 정말 간단합니다! 1. Master / Slave 설정 우선 redis 설치 폴더에서 master 폴더와 slave1, slave2 폴더를 각 각 생성해줍니다. 이 폴더들에는 rdb파일과 aof파일을 저장할 것입니다. C:\Task\tools\redis-3.0.504 Aug 3 20:15 master/ Aug 3 20:15 slave1/ Aug 3 20:15 slave2/ Jul 16 22:34 Logs/ Aug 3 19:59 redis.windows.conf Aug 3 17:41 redis.win..
-
[redis] RDB 저장 실패시에도 write 명령 허용하기데이터베이스 2022. 8. 3. 18:00
Redis 기본설정상 RDB 저장이 비정상적으로 종료가 되면 모든 Write 명령은 동작하지 않습니다. 127.0.0.1:6379> set kim "1234" MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error. RDB 저장 실패시에도 Write를 허용하는 2가지 방법이 있습니다. 1. 명령어 127.0.0.1:6379> config set stop-writes-on-bgsave-error no OK ..
-
[JPA] JPA의 변경감지에 대해서데이터베이스 2022. 7. 11. 11:16
변경감지란? 트랜잭션이 커밋되는 시점에 엔티티의 변경사항이 있으면 UPDATE 쿼리를 자동으로 생성해서 데이터베이스에 반영하는 JPA의 기능 EntityManager em = emf.createEntityManager(); EntityTransaction transaction = em.getTransaction(); transaction.begin(); // 영속 엔티티 조회 Member memberA = em.find(Member.class, "memberA"); // 영속 엔티티 데이터 수정 memberA.setUsername("hi"); memberA.setAge(10); //em.update(memberA) 이런 코드가 있어야 하지 않을까? transaction.commit(); JPA의 엔티티매..
-
[DB]데이터베이스 정규화(1NF, 2NF, 3NF)데이터베이스 2022. 7. 2. 15:30
정규화란? 정규화란 데이터의 중복을 제거하고 테이블의 안정성을 높이는 과정입니다. 테이블의 안정성을 높인다는 말의 의미는 테이블에 레코드를 insert할 때 null 값이 입력되거나, 삭제 시 연쇄삭제 현상이 발생하거나, 수정 시 데이터의 일관성이 훼손되는 현상을 제거한다는 의미입니다. 정규화된 테이블의 장점 1. 정규 테이블은 중복 데이터가 없어서 데이터베이스의 크기를 줄여줍니다. 2. 찾아야 할 데이터가 적어 쿼리가 더 빨라집니다. 3. 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지 제 1정규형(1NF) 1NF를 만족하는 규칙 제 1정규형, 1NF 규칙1. 각 행의 데이터들은 원자적 값을 가져야 한다. 규칙2. 같은 데이터가 여러 열에 반복되지 말아야 한다. 규칙3. 각 행은 유일무이한 식별..
-
[DB] 함수 종속성(functional dependency)이란?데이터베이스 2022. 5. 11. 00:18
함수 종속성(functional dependency) 정의 함수 종속성은 특정 속성(컬럼) A의 값이 바뀌면 다른 속성(컬럼) B의 값도 바뀌거나 특정 속성(컬럼) A의 값을 알면 다른 속성(컬럼) B의 값도 유일하게 정해지는 종속 관계를 말합니다. 다음은 축구선수 정보를 나타내는 축구선수 테이블입니다. name team age address initials James Rodríguez new york city 27 Gotham JR Park Ji Sung Manchester United 25 Manchester JSP cristiano ronaldo Real Madrid 22 Madrid CR 이니셜(initials) 열이 이름(name) 열 값의 이니셜 문자를 포함하고 있습니다. 만약 이름(name)..
-
[Querydsl] BooleanExpression을 사용한 동적쿼리 작성데이터베이스 2022. 4. 15. 18:04
Querydsl에서 동적쿼리를 작성할 때 사용되는 BooleanExpression 클래스를 설명하겠습니다.public abstract class BooleanExpressionextends LiteralExpressionimplements Predicate 1. BooleanBuilder동적쿼리를 작성할 때 사용하는 또다른 클래스 중 BooleanBuilder 클래스도 있습니다.BooleanExpression과 BooleanBuilder 둘 중 어느것을 선택하든 성능상의 차이는 없습니다.하지만 BooleanExpression은 어떤 의도의 쿼리문인지 한 번에 파악할 수 없다는 단점이 있습니다.아래는 BooleanExpression사용하여 이름과 나이로 멤버를 찾아주는 메서드입니다. BooleanBuild..