Java
[Java Algorithm] LRU 알고리즘이란?
LRU 알고리즘이란? LRU 알고리즘은 Least Recently Used의 약자로 직역하자면 가장 최근에 사용되지 않은 것이라는 의미를 가지고 있다. DB의 부하를 줄이기 위해 캐시 메모리를 사용한다. 하지만 캐시에도 용량이 존재하기 때문에 캐시 메모리 또한 관리를 해주어야 한다. LRU 알고리즘은 캐시에서 작업할 때 가장 오랫동안 사용하지 않은 것을 제거하는 알고리즘이다. Cache Hit / Miss Cache Miss : 찾는 데이터가 캐시에 없는 상태로 해당 데이터가 추가될 경우 가장 앞에 위치하게 된다. [1, 2, 3, 4, 5] -> 데이터 6 추가 [6, 1, 2, 3, 4] Cache Hit : 찾는 데이터가 캐시에 있는 상태로 해당 데이터 앞에 있는 데이터들은 뒤로 밀리고 해당 데이터..
[Java DataStructure] Priority Queue(우선순위 큐)란?
Priority Queue(우선순위 큐)란? 일반적으로 큐는 FIFO(First In First Out)의 구조로 동작하지만, 우선순위 큐는 데이터의 우선순위를 먼저 결정하고 그 순서로 나가는 자료구조이다. Priority Queue의 특징 1. 우선순위를 기준으로 데이터를 꺼낸다. 2. 내부 구조가 힙으로 구성되어 있어서 시간 복잡도가 O(NlogN)이다. 3. 우선순위를 기준으로 루트 노드를 정하고 꺼낼때 루트 노드가 나온다. 4. Comparator 인터페이스를 오버라이딩하여 우선순위를 재정의할 수 있다. Priority Queue 객체 선언 import java.util.PriorityQueue; // 오름차순 PriorityQueue pq = new PriorityQueue(); // 내림차순 ..
[JAVA] Garbage Collection 이란?
Garbage Collection 이란? 가비지 컬렉션은 자바의 메모리 관리 방법 중의 하나로 JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제하는 프로세스이다. C언어 같은 언어에서 메모리 관리는 프로그래머의 책임으로서, 직접 관리하지 않는다면 메모리 릭(Memory Leak)을 맞게 된다. Java나 Kotlin에서는 메모리 누수를 방지하기 위해 가비지 컬렉터가 불필요한 메모리를 알아서 정리해준다. JVM의 Heap 영역은 다음의 두가지 전제로 설계된다. 대부분의 객체는 금방 접근 불가능한 상태(Unreachable)가 된다. -> 객체는 대부분 일회성 오래된 객체(old)에서 새로운 객체(young)로의 참조는 아주 적게 존재한다. -> 메모리..
![[Spring WebFlux] Project Reactor](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdq0no4%2FbtrOs2wtTsx%2FqKJxNzkXd4KuyVoHRUNZoK%2Fimg.jpg)
[Spring WebFlux] Project Reactor
Reactive Programing 용어 정리 : https://wyjj.tistory.com/93 Reactor란? 리액티브 스트림즈 표준 사양을 구현한 구현체 중 하나이다. Spring 5 버전부터 지원하는 리액티브 스택에 포함되어 리액티브한 애플리케이션으로 동작하는데 핵심적인 역할을 하는 라이브러리이다. 기본적으로 요청 쓰레드가 차단되지 않는 Non-Blocking 통신을 지원하여 MSA(Microservice Architecture) 구조에 적합한 라이브러리이다. Reactor는 Publisher 타입으로 Mono[0|1]와 Flux[N]이라는 두 가지 타입을 제공한다. Mono[0|1]은 0건 또는 1건의 데이터를 emit 할 수 있고, Flux[N]은 N개의 데이터를 emit 할 수 있음을 의..
![[Spring WebFlux] 리액티브 프로그래밍이란?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkZZfe%2FbtrOqMebAEs%2Fe06KMUFHMJ2oRTgmZDgk10%2Fimg.png)
[Spring WebFlux] 리액티브 프로그래밍이란?
리액티브 시스템(Reactive System)이란? 리액티브 시스템은 클라이언트의 요청에 대한 응답 대기 시간을 최소화 할 수 있도록 요청 쓰레드가 차단되지 않게 함으로써(Non-Blocking) 클라이언트에게 즉각적으로 반응하도록 구성된 시스템이라고 볼 수 있다. MEANS 리액티브 시스템에서 사용하는 커뮤니케이션 수단을 의미한다. Message Driven 리액티브 시스템에서는 메세지 기반 통신을 통해 여러 시스템 간에 느슨한 결합을 유지한다. FORM 메세지 기반 통신을 통해 리액티브 시스템이 어떤 특성을 가지는 구조로 형성되는지를 의미한다. Elastic 시스템으로 들어오는 요청량에 상관없이 일정한 응답성을 유지하는 것을 의미한다. Resillient 시스템의 일부분에 장애가 발생하더라도 응답성을..
![[Java DataStructure] Graph](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FleA0p%2FbtrIdXBggcm%2F822Us8NKGufGHxcRmgIl01%2Fimg.png)
[Java DataStructure] Graph
Graph란? 여러개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조이다. Java의 Collections를 사용하여 프로그래밍 방식으로 그래프를 나타낼 수 있다. 그래프를 생성하는 가장 일반적인 방법은 인접 행렬 또는 인접 목록과 같은 그래프 표현 중 하나를 사용하는 것 구조 및 용어 정점(vertex) : 정점 (vertex): 노드(node)라고도 하며 데이터가 저장되는 그래프의 기본 원소 간선 (edge): 정점 간의 관계 (정점을 이어주는 선) 인접 정점 (adjacent vertex): 하나의 정점에서 간선에 의해 직접 연결되어 있는 정점 가중치 그래프 (weighted Graph): 연결의 강도가 얼마나 되는지 적혀져 있는 그래프 비가중치 그래프 (unweighted Graph)..
![[Java Algorithm] Algorithm with Math (순열 / 조합)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMWS7l%2FbtrICPgXzyg%2FGt5cfsBreMlGbTWzHeny2K%2Fimg.png)
[Java Algorithm] Algorithm with Math (순열 / 조합)
순열(permutation)과 조합(Combination)이란? 순열 : 요소 n개 중에 m개를 선택하여 순서에 상관 있게 뽑는 경우의 수. 조합 : 순서에 상관없이 요소 n개 중에 m개를 뽑는 경우의 수. 공식 팩토리얼 (!) 순열 (nPr) : Permutation 조합 (nCr) : Combination 예시) 반복문을 이용한 카드 뽑기 A, B, C, D, E로 이뤄진 5장의 카드가 있다. 이 5장의 카드 중 3장을 선택하여 나열하려고 한다. 나열 조건 순서를 생각하며 3장을 선택 -> 순열 순서를 생각하지 않고 3장을 선택 -> 조합 case 1. 순서를 생각하며 3장을 선택 공식 대입 5P3 = 5! / (5-3)! = (5(5-1)*(5-2)*(5-3)*(5-4)) / 2*(2-1) = 60..