The-Least-Eligible-Codes

  • Spring - 런타임시 스프링 스케쥴러 크론 표현식 변경하기

    1. 실행자 프레임워크와 스프링 스케쥴러 배치(batch)작업이 없는 비교적 간단한 스케쥴러도 스프링 부트(이하 스프링) 프로젝트에서 많이 사용하고 있습니다. 저는 이런 간단한 루틴의 스케쥴러는 자바 동시성 패키지의 ‘실행자 프레임워크(Executor Framework)’와 CompletableFuture를 조합하여 직접 구현하거나, 혹은 스프링이 제공하는 스케쥴러 API 를 사용합니다. 물론 스프링 스케쥴러 API 도 내부적으로 실행자 프레임워크를 사용합니다. 저는 특히...

  • 집에있는 컴퓨터로 웹 서비스 배포 준비하기

    향후 완성될(언제가 될지 모르는) 토이 프로젝트 웹 서비스 배포를 준비하기 위해 집에있는 컴퓨터를 서버로 사용해 보겠습니다. 예제에서는 매우 간단한 프론트와 백엔드 데모 프로그램을 배포하겠습니다. 그리고 포스팅을 위해 일회성으로 도메인도 구입하여 연결 해보겠습니다. 1. 서버 준비 1.1 우분투 설치 저를 포함한 대부분의 사람들은 집에 서버나 워크스테이션급의 컴퓨터가 없습니다. 그러니 집에 굴러다니고...

  • Redis - List 자료구조 사용하기

    1. List 레디스의 List 는 문자열을 저장하는 Linked-List 자료구조이며 지원되는 명령어들을 사용하여 Stack 이나 Dequeue 로 사용할 수 도 있습니다. 주요 명령어는 다음과 같습니다. LPUSH : left push. 리스트 왼쪽으로 원소를 삽입합니다. LPOP : left pop. 리스트 가장 왼쪽의 원소 하나를 꺼냅니다. 해당 원소는 리스트에서 제거됩니다. RPUSH : right push....

  • 멀티스레드 환경에서 여러 java.util.concurrent 컬렉션을 함께 사용하기

    1. ConcurrentModificationException @Test void concurrentModificationExceptionTest() { Map<Integer, String> map = new HashMap<>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); assertThrows(ConcurrentModificationException.class, () -> map.forEach((k, v) -> { if (k == 2) { map.remove(k); } })); } 위의 코드는 맵 객체를 순회하는 중에 해당 객체를 수정하려 시도하기 때문에 ConcurrentModificationException이 발생합니다. 상기의 예제는 removeIf같은...

  • Ed25519-바운시캐슬로 Ed25519 키 생성과 서명하기

    비트코인과 이더리움은 디지털 서명을 위해서 Secp256k1 타원곡선을 사용하지만, 솔라나(Solana) 네트워크는 Ed25519를 사용하는것을 알게되었습니다. Ed25519는 Curve25519 타원곡선을 기반으로 하고 있습니다. 그래서 기존에 의존성으로 사용중이던 바운시캐슬을 사용하여 키페어 생성과 서명을 수행하는 간단한 헬퍼 메소드를 만들어보았습니다. 소스는 자바 1.8 버전으로 작성되었습니다. 1. 키페어 생성 public static List<byte[]> generateKeypair() { final Ed25519KeyGenerationParameters parameters =...