전체보기(194)
-
트라이
트라이란 트라이란 문자열 검색을 빠르게 할 수 있는 자료구조 입니다. 문자열을 특정 키 값으로 변환해서 그 값으로 찾는 방법인 해시 테이블을 대체하기 위해 트라이를 사용할 수 있습니다. 불완전한 해시 테이블의 최악 검색 속도는 모든 데이터를 다 확인하는 것이지만 트라이를 사용하게 되면 문자열 길이 만큼의 속도가 걸리기 때문에 훨씬 더 빠르게 적용이 될 수 있습니다. 보통 트라이를 사용할 때 고려해야할 점은 단어의 길이와 파생되는 Child 노드의 개수입니다. 영어 사전을 예로 들자면, 영어는 알파벳이 26가지이기 때문에 Child 노드는 26개를 가지고 있을 수 있습니다. 전화번호 목록 같은 경우도 0부터 9가지 10가지의 수를 가지고 있을 수 있습니다. 이처럼 적은 Child 노드를 가지고 있는 데이터..
2020.06.04 -
KMP 알고리즘
1. 가장 단순한 문자열 검색 가장 단순한 문자열 검색은 문자열의 시작부터 마지막까지 하나씩 주어진 패턴이 존재하는지 확인하는 방법입니다. 예를 들어 텍스트 “ABCABABCDE”에서 패턴 “ABC”가 어디서 등장하는지 찾아봅니다. 패턴 “ABC”를 시작부터 한 자리씩 옮기면서 같은지 비교합니다. 위의 그림과 같은 과정을 보면 “ABCABABCDE”에서 패턴 “ABC”는 두 번 등장함을 알 수 있습니다. (녹색 네모로 표시된 그림이 일치하는 경우) 이 과정의 시간 복잡도는 텍스트의 길이를 N, 패턴의 길이를 M이라 할 때, 각 텍스트의 인덱스에 대해 패턴이 일치하는지 비교하므로 O(NM)입니다. 2. KMP 알고리즘이란 KMP 알고리즘을 이해하기 위한 사전 지식 우선 KMP 알고리즘을 이해하기 위해 먼저..
2020.06.04 -
암호화 알고리즘
1. 양방향 단방향 알고리즘 암호화 알고리즘을 가장 먼저 분류하는 방식은 양방향, 단방향 알고리즘입니다. 간단하게 말해서, 양방향 알고리즘은 암호화된 암호문을 복호화할 수 있는 알고리즘을 의미합니다. 반대로 단방향 알고리즘은 암호화는 수행하지만 절대로 복호화가 불가능한 알고리즘을 의미합니다. 2. 공개키 비공개키 방식 비공개키 비공개키는 사용하는 키와 복호화 할 때 사용하는 키가 동일한 암호화 기법입니다. 대칭형 암호화는 훌륭한 암호화 방식이지만 결정적인 문제가 존재합니다. 바로 ‘키 배송’에 관한 문제로, 어떠한 방식으로든 송신 측에서는 수신 측에 암호 키를 전달해야만 하고, 이 키가 배송과정에서 털리면 아무리 뛰어난 암호화 알고리즘을 사용했더라도 평문이 공개됩니다. 안전하게 평문을 전달하기 위해 만든..
2020.06.04 -
ThreadLocal
일반 변수의 수명은 특정 코드 블록 범위 내에서만 유효합니다. { int a = 10; // 변수 a는 현재 코드 블록내에서만 유효 } ThreadLocal을 이용하면 스레드 영역에 변수를 설정할 수 있기 때문에, 특정 스레드가 실행하는 모든 코드에서 그 스레드에 설정된 변수 값을 사용할 수 있게 됩니다. public class ThreadLocalTest implements Runnable { @Data @AllArgsConstructor static class UserInfo { private String name; } private static final ThreadLocal userInfoThreadLocal = new ThreadLocal() { @Override protected UserInf..
2020.05.26 -
AMQP
AMQP란 AMQP란 클라이언트 미들웨어 브로커 간에 데이터 교환을 위한 MQ기반 메시지 교환 프로토콜입니다. AMQP의 특징 다른 기종 시스템 간 벤더 종속 없이 표준화된 네트워크 프로토콜 사용 비용 / 기술 / 시간적 측면에서 최대한 효율적 메시지 교환을 위한 MQ 사용 AMQP의 구성 Exchange Publisher로부터 수신한 MQ를 바인딩 여러 exchange type 인스턴스를 보유 Queue 메시지 저장 후 Consumer에 전달 메시지 타입 Exchange에 바인딩 Binding Exchange와 Queue의 관계 정의 1:N, N:1등 여러 방식으로 바인딩 Routing Key 송신 메시지 헤더에 포함되는 가상 주소 Exchange type은 Routing Key 이용 Exchange ..
2020.05.13 -
Rabbit MQ
1. Rabbit MQ란 Rabbit MQ란 AMQP를 구현한 메시지 브로커입니다. AMQP라는 표준 MQ 프로토콜로 만들어져 있고 Cluster 구성이 쉽고 Manage UI가 제공되며 무엇보다 성능이 뛰어나다고 알려져 있습니다. 또한 다양한 plugin도 제공되어 확장성이 뛰어나며 Spring에서도 AMQP 연동 라이브러리가 제공되어 편리하게 연동하여 사용이 가능합니다. 특징 ISO 표준 AMQP 구현 비동기 처리를 위한 메시지 큐 브로커 Erlang과 java언어로 만들어짐 분산 처리를 고려한 메시지 큐 고가용성 보장 Pub/Sub 모델 형식 다양한 plugin 지원 주요 옹어 Producer: 메시지를 보내는 Application Publish: Producer가 메시지를 보냄 Queue: 메시지..
2020.05.13