Producer–Consumer 패턴이란?
·
공부/CS
1. Producer–Consumer 패턴이란?Producer–Consumer 패턴은“데이터를 생산하는 주체(Producer)와 데이터를 처리하는 주체(Consumer)를 분리하고,중간에 공유 버퍼(Queue)를 두어 두 주체가 서로 비동기로 동작하도록 만드는 디자인 패턴”이다.핵심 아이디어는Producer는 자신의 속도대로 데이터를 생성해서 큐에 넣고,Consumer는 자신의 속도대로 큐에서 꺼내 처리한다.큐가 속도 차이를 완화해 주기 때문에, 한쪽이 느려도 다른 쪽이 바로 막히지는 않는다.다만 큐가 bounded(유한 크기)라면, Consumer가 지속적으로 느리면 큐가 가득 차면서 back‑pressure가 발생할 수 있다.2. 구성 요소대표적인 구성은 다음과 같다.구성 요소역할Producer데이터..
GPU 연산을 분리한 비동기 처리 아키텍처 설계
·
개발 기록/프로젝트 - BUKAE
0. 서론현재 진행 중인 프로젝트 BUKAE는 실제 창업을 전제로 준비 중인 서비스다.이 프로젝트는 다음과 같은 현실적인 조건을 가진다.전체 예산이 제한적이다.고성능 GPU는 학교에서 대여한 서버를 사용한다.영상 인코딩이라는 고부하 워크로드를 포함한다.영상 생성 시 크레딧(금전성 자산)이 실제로 소모된다.즉, 이 프로젝트는 성능, 비용, 안정성, 신뢰성을 동시에 고려해야 하는 구조다.이 글은 이러한 환경에서GPU 연산을 API 서버에서 분리하고, 비동기 워커 기반으로 처리하도록 설계한 아키텍처에 대한 정리다. 1. 프로젝트의 제약 조건1.1 비용과 인프라 제약이 프로젝트는 다음과 같은 제약을 전제로 한다.웹/API 서버는 소수의 CPU 인스턴스로 운영해야 한다.GPU 서버는 학교에서 빌린 자원이므로 항상..
[JAVA] 배열(Array) vs ArrayList vs Vector
·
공부/JAVA
과거에는 배열(Array), ArrayList, Vector를 기본적인 연속 메모리 기반 자료구조로 많이 비교했지만,현대 Java에서 주로 사용하는 것은 배열과 ArrayList이고, Vector는 레거시로 간주된다. 이 세 가지는 모두 인덱스로 접근이 가능한 연속 메모리 기반 구조라는 공통점을 가지지만,메모리 할당 방식과 크기 관리, 동기화 여부에서 큰 차이가 있다.1. 세 가지 자료구조 한눈에 보기먼저 전체적인 특징을 간단히 정리한다. 구분배열(Array)ArrayListVector크기고정동적동적내부 구조원시 배열Object[]Object[]메모리 위치힙힙힙인덱스 접근O(1)O(1)O(1)동기화없음없음있음권장 여부제한적대부분거의 없음 2. 배열(Array)2.1 개념과 특징배열은 크기가 고정된 가장..
B-Tree vs B+Tree 완벽 비교: 데이터베이스 인덱스 성능 최적화
·
공부/DB
데이터베이스 관리 시스템(DBMS)의 성능을 논할 때 인덱싱(Indexing)은 결코 빠질 수 없는 주제다. 방대한 데이터를 다루는 환경에서, 원하는 데이터를 얼마나 빠르게 찾아낼 수 있느냐는 서비스의 품질을 결정짓는 척도와도 같다.메모리(RAM)와 디스크(Storage)의 속도 차이는 여전히 거대하다. CPU 레지스터는 나노초(ns) 단위로 접근이 가능하지만, 메모리는 수십 나노초, SSD는 마이크로초(μs), 그리고 HDD는 밀리초(ms) 단위의 시간이 소요된다. 이 물리적 한계를 극복하기 위해 최소한의 디스크 I/O만으로 데이터를 탐색할 수 있는 자료구조가 필요했고, 그 해답의 중심에 B-Tree와 B+Tree가 있다.B-Tree정의 및 구조적 특징B-Tree는 디스크와 같은 보조 기억 장치를 위해..
Redis 없이 외부 API Rate Limit 설계하기
·
개발 기록/프로젝트 - BUKAE
현재 프로젝트 BUKAE(부캐)의 서버 개발을 담당하고 있다.BUKAE는 여러 외부 API에 의존하는 구조를 가지고 있다. 그중 일부 API는 서비스의 핵심 기능과 직접적으로 연결되어 있으며, 호출 정책을 위반할 경우 단순한 오류가 아니라 서비스 전체 기능이 중단될 수 있는 리스크를 내포하고 있다. 🚨 문제 상황: 외부 API Rate Limit과 24시간 BanBUKAE에서는 상품 정보를 정확하게 조회하기 위해 외부 커머스 API를 사용하고 있다. 개발 중 API 문서를 확인하던 과정에서 다음과 같은 정책을 확인했다.분당 최대 50회 호출 가능제한 초과 시 24시간 동안 API 호출 차단이 정책은 단순히 "잠시 후 다시 시도하라"는 응답을 주는 수준이 아니었다. 한 번의 실수로 하루 동안 서비스의 핵..
[정보처리기사] 2025년 정기 기사 3회 합격 후기
·
자격증
2025년 3회 정보처리기사 필기 + 실기를 모두 응시하고 난 후기를 정리해본다.전공자 기준으로 느낀 난이도와 공부 방법 위주로 작성했으며,응시 예정인 분들께 조금이나마 참고가 되었으면 한다. 1️⃣ 시험 응시 배경 및 공부 기간필자는 IT 전공자이며 4학년 재학 중이다.기본적인 전공 지식은 있었지만, 자격증 시험 특성상 별도의 준비는 필요했다.⏱ 공부 기간필기: 약 2주실기: 약 3주하루 공부 시간: 평균 1~2시간 2️⃣ 필기 후기📘 사용 교재필기는 전형적인 문제은행식 시험이다.각 과목별로 과락만 피하면 전체 합격은 크게 어렵지 않은 편이다.📌 공부 팁기출문제 반복 풀이가 핵심이해보다는 암기 비중이 높음최신 기출 위주로 많이 풀수록 유리👉 개인적으로는“기출 열심히 풀고, 많이 외우는 게 답” 이..
[JAVA] 어노테이션과 리플렉션 원리
·
공부/JAVA
자바 개발자, 특히 스프링 부트를 사용하는 개발자라면 숨 쉬듯이 어노테이션(Annotation)을 사용한다. @Controller, @Service, @Transactional 등 골뱅이(@) 하나만 붙이면 빈(Bean)이 등록되고 트랜잭션이 관리되는 마법 같은 일들이 일어난다.하지만 많은 개발자가 어노테이션을 "그냥 붙이면 기능이 생기는 것" 정도로 이해하고 넘어간다. 도대체 이 텍스트 조각이 어떻게 코드를 변화시키는 것일까? 그리고 public @interface라는 선언은 인터페이스와 무슨 관계일까?이번 글에서는 어노테이션의 본질인 메타데이터와 인터페이스로서의 정체, 그리고 이를 작동시키는 리플렉션(Reflection)의 원리를 파헤쳐본다. 1. 어노테이션의 정체: 메타데이터사전적 의미로 어노테이션..
[Java] Record는 무엇인가?
·
공부/JAVA
Java 14에서 Preview로 등장해 Java 16에서 정식 기능으로 채택된 record는 오랜 골칫거리였던 "지저분한 보일러플레이트 코드"를 획기적으로 줄여주었다.이번 글에서는 record의 정확한 정의와 내부 동작 방식을 자세히 정리해 본다. 1. Record란 무엇인가?Record는 "데이터를 운반하는 불변(Immutable) 객체"를 아주 쉽게 생성할 수 있도록 만든 새로운 유형의 "클래스"이다.기존에 데이터 전송 객체(DTO)를 만들 때 우리는 단순히 필드 몇 개를 정의하기 위해 수십 줄의 코드를 작성해야 했다. Record는 이 문제를 해결하기 위해 탄생했다.2. 코드 비교이름과 나이를 가진 간단한 Person 객체를 만든다고 가정해 보자.기존 Class 방식필드, 생성자, Getter, ..