Java 멀티스레드 환경에서 타이머 구현하기

1. 타이머의 개념과 필요성타이머는 특정 시점이 되면 지정된 동작을 수행하도록 예약하는 메커니즘입니다. Java의 java.util.Timer 클래스가 대표적인 구현체이며, schedule() 메서드를 통해 작업을 예약합니다.실무에서는 제한 없는 대기를 피하기 위해 필수적으로 사용됩니다. 예를 들어, 웹 브라우저의 요청 타임아웃(504 Gateway Timeout), 데이터베이스 백업, 캐시 ...

6월 8일 16:28에 게시됨

사용자 비밀번호의 안전한 처리 방법

디지털 환경이 확장되면서 사용자는 수많은 서비스에 계정을 생성하고, 각각의 비밀번호를 관리해야 하는 부담을 느끼게 되었습니다. 이러한 상황에서 비밀번호가 유출될 경우 개인정보 유출이나 계정 탈취로 이어질 수 있으므로, 비밀번호 보안은 필수적인 요소입니다. 최근 일부 기업의 데이터베이스 유출 사고를 통해 알 수 있듯, 단순히 비밀번호를 저장하는 것이 아니 ...

6월 8일 02:59에 게시됨

Java CompletableFuture를 활용한 효율적인 비동기 프로그래밍 및 작업 조합

기존 Future 인터페이스의 한계 Java의 Future 인터페이스는 비동기 작업의 결과를 나타내고 관리하는 데 사용됩니다. FutureTask와 Callable을 결합하면 메인 스레드와 별도로 실행되는 백그라운드 작업을 생성할 수 있습니다. 그러나 기존 Future는 다음과 같은 명확한 한계를 가집니다. 1. get() 메서드의 블로킹 문제 get() 메서드를 호출하면 작업이 완료될 때까지 ...

6월 8일 01:05에 게시됨

MyBatis 분할 및 결과 병합 문제 해결

SQL 분할 쿼리 변환 지원 문제 문제는 페이지네이션 변경 과정에서 발생했습니다. 원래의 메서드에서 전체 결과를 가져온 후 수동으로 페이지네이션을 적용하던 로직을 startPage를 사용하여 데이터베이스에서 직접 페이지네이션된 결과를 가져오는 방식으로 수정했습니다. 아래는 간략한 코드 예시입니다: public void foo(Entity entity){ startPage(); var list ...

6월 7일 21:34에 게시됨

Java 멀티스레드 심층 분석: 생성부터 고급 동기화까지

1. 프로그램, 프로세스, 스레드 프로그램(Program)은 명령어와 데이터의 정적인 집합체로, 실행 중이 아닌 상태를 의미합니다. 프로세스(Process)는 프로그램이 실행 중인 동적인 상태로, 시스템 자원 할당의 기본 단위입니다. 스레드(Thread)는 프로세스 내에서 실행되는 더 작은 단위이며, 모든 프로세스는 최소 하나의 스레드를 가집니다. CPU 스케줄링의 실제 대상입 ...

6월 7일 18:19에 게시됨

Java에서의 Map 데이터 구조

Java 프로그래밍 언어에서 기본적인 데이터 구조는 배열과 참조(가상 포인터)로 구성됩니다. 모든 데이터 구조는 이 두 가지 기본 요소를 통해 구현됩니다. HashMap은 배열과 연결 리스트의 결합체로, 데이터 구조에서 일반적으로 "연결된 해시"라고 불립니다. 배열이란? Java는 동일한 타입의 요소를 저장하는 고정 크기의 연속형 컬렉션을 제공합니다. 이는 배 ...

6월 7일 18:01에 게시됨

Netty 서버에서 클라이언트로 메시지 전송 구현

Netty 기반 서버-클라이언트 통신 구조에서 서버 측 메시지 전송을 구현하는 방법을 설명합니다. WebSocket 프로토콜을 활용한 채팅 시스템 예제로 핵심 구성 요소를 다룹니다. Netty 서버 기본 구조 import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventL ...

6월 7일 17:56에 게시됨

Netty 리액터 패턴의 동작 원리 소스 코드 분석

1. EventLoop의 개념 EventLoop은 간단히 설명하면 이벤트를 지속적으로 감시하는 무한 루프 구조입니다. 이벤트가 발생하면 해당 이벤트를 처리하는 역할을 담당합니다. 일반적인 구현 방식은 별도의 스레드를 생성하여 끊임없이 루프를 실행하는 것입니다. 기본 구조: while (selector.select()) { processSelectedKeys(); } 2. EventLoopGroup의 구조 EventLoo ...

6월 7일 01:14에 게시됨

Java 알고리즘 풀이: 텐센트 2018 상반기 채용 기출 문제

문제 1: 교차 부호 수열의 합 길이 n의 연속된 정수 수열 1, 2, 3, ... n에 대해, 매 m개마다 부호를 교차시키는 수열을 정의합니다. 초기 부호는 음수(-)이며, 부호는 -, -, ..., +, +, -, -, ... 순서로 반복됩니다. 이때 처음 n개 항의 총합을 구하는 문제입니다. 입력 조건: 두 정수 n, m (2 ≤ n ≤ 10⁹, 1 ≤ m), n은 2m으로 나누어 떨어짐 출력: 처음 n개 항의 합 ...

6월 6일 22:56에 게시됨

ActiveMQ 설치 및 설정 가이드

이 문서는 ActiveMQ Classic을 Unix와 Windows 플랫폼에 설치하고 설정하는 방법을 설명합니다. 설치 전 요구 사항 하드웨어: ActiveMQ Classic 바이너리 배포판: 60MB의 여유 디스크 공간. ActiveMQ Classic 소스 코드 또는 개발자 배포판: 200MB의 여유 디스크 공간. 운영 체제: Windows: Windows XP SP2, Windows 2000. Unix: Ubuntu Linux, Powerdog Linux, MacO ...

6월 6일 19:34에 게시됨