분류 전체보기(90)
-
인덱스로 BTree계열이 자주 사용되는 이유
인덱스로 BTree계열이 자주 사용되는 이유 BTree, AVL Tree, Red-Black-Tree 시간복잡도 BTree Binary Search Tree(BST)를 일반화한 트리 Self-Balancing BST BST중에서 한쪽으로 치우치는 것이 있는데, 이를 보완하기 위해 스스로 규형을 잡는 트리인 AVL트리, RedBlackTree가 있다. 세개 모두 시간복잡도가 O(logN)인데 왜 굳이 BTree를 DB INDEX로 자주 쓰일까? 위를 이해하기 앞서, computer system을 이해할 필요가 있다. computer system computer system에는 총 3가지로 나눠서 설명할 수 있다. cpu 프로그램 코드가 실제로 실행되는 곳 main memory(RAM) 실행 중인 프로그램의..
2024.02.02 -
프로세스 동기화(3) monitor
monitor 실행 순서를 위한 동기화 및 상호 배제를 위한 동기화에 대해 모두 제공한다. mutual exclusion을 보장한다. 조건에 따라 스레드가 대기(waiting)상태로 전환 가능하다. monitor에는 두개의 큐가 존재한다. entry queue : critical section에서 진입을 기다리는 큐로서, mutex에 의해 관리된다. waiting queue : 조건이 충족되길 기다리는 큐로서, condition variable에 의해 관리된다. 프로그래밍 언어 레벨에서 지원하는 것임! 구성요소 mutex critical section에서 mutual exclusion을 보장하는 장치로 critical section에 진입하려면 mutex lock을 취득해야한다. mutex lock을 취..
2024.01.30 -
프로세스 동기화(2) - deadlock?
Deadlock 위 오른쪽 그림이 deadlock임을 말할 수 있다. 숫자 1, 2, 3, 4가 리소스이고, 자동차가 프로세스라고 생각해보자. 각 차들은 직진하기 위해 2개의 리소스를 점유해야한다. 각 차들이 마음이 급해 자원을 하나 점유는 하였으나, 그 외에 리소스들은 각 다른 차량들이 점유하고 있어 교착상태에 빠지게 되어 계속 하염없이 기다리게 되었다. (=deadlock) 즉, 두 개 이상의 프로세스 혹은 스레드가 서로가 가진 리소스를 기다리는 상태를 의미한다. Deadlock이 발생하기 위한 4가지 조건, 4가지 조건이 모두 만족해야 deadlock이 발생한다. Mutual Exclusion 리소스를 공유해서 사용할 수 없다. Hold and Wait 프로세스가 이미 하나 이상의 리소스를 취득(h..
2024.01.30 -
프로세스 동기화(1)
동시성 : cpu core가 한개일때, 시분할 시스템으로 프로세스를 짧은 시간 동안 번갈아 가면서 실행하는 것 병렬성 : cpu core가 여러개일때, 각각의 core가 각각의 프로세스를 실행하는 것 동기화를 이해하기 위해 필요한 용어 race condition(경쟁 조건) 여러 프로세스 혹은 여러 스레드가 동시에 같은 데이터를 조작할 때 타이밍이나 접근 순서에 따라 결과가 달라질 수 있는 상황 이를 해결하기 위해 mutal exclusion을 이용하자! synchronization(동기화) 여러 프로세스 혹은 여러 스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 것 critical section(임계 영역) 공유 데이터의 일관성을 보장하기 위해 하나의 프로세스 혹은 하나의 스레드만 진입(=mu..
2024.01.29 -
Refresh Token을 redis에 저장한 이유?
petree의 jwt흐름도 Refresh Token을 Redis에 저장한 이유? Redis는 key-value쌍으로 데이터를 관리할 수 있는 data storage이다. DB가 아닌 data storage라고 표현하지 않은 이유는 기본적으로 Redis는 in-memory로 데이터를 관리하므로, 저장된 데이터가 영속적이지 않기 때문이다. 이때 in-memory란? - DISK DBMS의 경우 - 디스크에 저장된 내용을 메인 메모리로 로딩을 해야하며 실행을 위해서는 cpu로 해당 데이터를 재전송해야한다. 하지만 메모리가격보다 저렴하다. - in-memory DBMS의 경우 - 메인 메모리에서 바로 cpu로 데이터를 전송만 하면 되므로 구조상 간단하다. 하지만 비용이 비싸다. 이러한 Redis에 Refresh..
2024.01.26 -
QueryDSL을 도입한 이유
QueryDSL을 도입한 이유 JPQL(Java Persistence Query Language) JPA에서 제공하는 메소드 호출만으로 섬세한 쿼리작성이 어렵다는 문제로 탄생된 것으로 테이블을 대상으로 쿼리하는 것이 아닌 엔터티 객체를 대성으로 쿼리한다. QueryDSL JPQL을 java코드로 작성하게 해주는 JPQL Builder이다. (=쉽게 말해, JPQL을 java코드로 작성가능하다.) 장점 코딩 과정에서 문법에러를 미리 알 수 있으며, 검색을 위한 유동적인 쿼리를 작성할 수 있는 장점을 가지고 있다. 단점 JPA 1차 캐시사용이 불가능하다. JPA를 통해 select하게되면, 영속성 컨텍스트 1차 캐시에 데이터가 저장되는데, QueryDSL은 이를 무시하고 DB에서 직접적으로 조회해온다. 여기..
2024.01.25