Java(18)
-
Java ForkJoinPool의 Work-Stealing 알고리즘 완벽 가이드: 고성능 병렬 처리의 비밀
Java의 ForkJoinPool로 알아보는 Work-Stealing 동시성 모델이번 포스팅에서는 Java의 동시성 처리를 위한 ForkJoinPool과 Work-Stealing 알고리즘에 대해 알아보겠습니다. Java 7부터 도입된 이 기능은 멀티코어 환경에서 효율적인 병렬 처리를 가능하게 해주는 중요한 도구입니다."ForkJoinPool은 병렬 스트림과 CompletableFuture가 사용하는 실행 메커니즘이자, 고성능 작업 분할을 위한 핵심 프레임워크입니다."- Doug Lea (Java의 java.util.concurrent 패키지의 주요 설계자)ForkJoinPool의 필요성일반적인 ThreadPool만으로는 다음과 같은 한계가 있습니다:작업 분배의 불균형: 일부 스레드에 작업이 집중되는 현상..
2025.03.16 -
알림톡과 예약 시스템의 트랜잭션 분리 - 아웃박스 패턴 도입기
문제 상황시작은 이랬습니다.“앤디(영어이름), 서버에 알림톡 에러 났다는 버그가 있던데요?”“앤디, 항공권이 예약이 제대로 안 됐다는데 확인좀 부탁드려요.”이런 문의가 들어왔을 때 가장 먼저 확인하는 것이 예약 상태입니다.일반적으로는 예약 실패시 즉시 사용자에게 피드백이 가야하는데, 해당 건은 예약도 실패했고 알림도 실패한 상황이었죠.로그를 확인해보니 ApiPlex(카카오 알림톡 대행사)와의 통신 오류로 인해 알림톡 발송에 실패했고, 이 실패가 예약 트랜잭션을 롤백시킨 것이었습니다.더 큰 문제는 사용자는 예약을 시도했다가 실패했다는 것조차 알 수 없었다는 점입니다.이는 출장 예약 시스템에서는 심각한 문제였습니다.항공권이나 호텔의 경우 실시간 재고(좌석, 객실)가 중요한데, 알림톡 장애로 인해 예약이 실패..
2025.01.29 -
비즈니스 확장성을 고려한 알림톡 발송 시스템 개선기: 전략 패턴의 실전 적용
알림톡이란?알림톡은 카카오톡이 제공하는 기업용 메시징 서비스입니다.일반적인 카카오톡 메시지와는 달리, 알림톡은 사용자가 해당 카카오톡 채널을 친구로 추가하지 않아도 정보성 메시지를 발송할 수 있다는 특징이 있습니다.기업들은 주로 주문 내역, 예약 확인, 배송 현황 등 사용자에게 꼭 필요한 정보를 전달하는 용도로 사용됩니다.알림톡의 장점은 다음과 같습니다:친구 추가가 없어도 발송 가능최대 1,000자까지 텍스트 전송 가능버튼을 통한 액션 유도 (최대 5개)높은 도달률과 신뢰도스팸이나 피싱의 위험이 낮음출장관리시스템에서의 알림톡 활용저희 회사가 만드는 출장관리시스템(이하 BTMS)에서는 다음과 같은 상황에서 알림톡을 활용하고 있습니다:항공권 예약 알림미확정(예약 실패)예약 완료 알림에약 취소발권 완료체크인 ..
2025.01.26 -
왜 Elasticsearch는 Java로 개발되었을까? Compass부터 Lucene까지
이 글은 팀원의 단순한 한마디 "왜 Elasticsearch 는 C 나 C++ 이 아니고 Java 로 개발했어요?성능을 고려한다면 Java 보단 다른게 좋지 않나?" 라는 의문에서 시작된 글입니다.Elasticsearch란?Elasticsearch is a search engine based on Apache Lucene. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents. 출처 : https://en.wikipedia.org/wiki/Elasticsearch#External_linksElasticsearch는 Apache L..
2024.11.10 -
Java 이해도 미쳤ㄴ,,,? 면접관님 이거 한번 보세요 (Java 계산기)
프로젝트의 시작 어느 날 익명의 기업으로부터 흥미로운 과제를 받았습니다. 과제의 내용은 다음과 같았습니다. 💡 회사는 스프린트 단위로 프로젝트를 진행합니다. 이번 스프린트에서는 사칙연산, 다음 스프린트에서는 삼각함수를 구현할 예정입니다. 추후에는 로그, 미적분이 예정되어 있습니다. 확장에 유리한 설계를 해주세요. v1. 설계의 시작과 문제점 인식 초기에 저는 사칙연산을 처리할 수 있는 간단하고 직관적인 설계를 구상했습니다. 이를 위해, 사용자의 입력을 분석하고 연산을 수행하는 Calculator 클래스와 연산을 추상화하는 Operation 인터페이스를 도입했습니다. 또한, 연산 종류에 따라 적절한 연산 객체를 생성하는 OperationFactory 클래스도 만들었습니다. 하지만 이 설계는 곧 두 가지 큰..
2024.03.01 -
정적 유틸리티 클래스 -> 인터페이스 기반 설계로: java에서 OCP 원칙을 적용
자바 개발자라면 누구나 효율적인 코드 구조와 객체지향적 설계의 중요성을 인식합니다. 특히, 게시물 추적 기능과 같이 데이터를 처리하고 분석해야 하는 경우, 코드의 재사용성과 확장성은 더욱 중요해집니다. 이 글에서는 DateBasedPostTracker 클래스를 예로 들어 정적 유틸리티 클래스와 인터페이스 기반 설계의 각각의 장단점을 탐구하고, 어떤 방법이 객체지향적인 설계 원칙, 특히 개방/폐쇄 원칙(OCP)을 더 잘 따르는지 논의해 보겠습니다. DateBasedPostTracker 클래스 소개 DateBasedPostTracker는 특정 날짜에 게시된 해축겔 게시판의 정보를 가져오는 기능을 제공하는 클래스입니다. 이 클래스는 세 가지 주요 기능을 포함합니다. 1. findFirstPage(String ..
2024.02.05