본문 바로가기

분류 전체보기99

소프트웨어 아키텍처 패턴 문서화 템플릿 및 예시 ✅ 패턴 설명 템플릿항목 설명Name (이름)패턴의 명칭. 간결하고 핵심 개념을 잘 드러내야 함.Context (맥락)이 패턴이 적용되는 일반적인 시스템 환경 또는 상황.Problem (문제)패턴이 해결하고자 하는 근본적인 문제나 어려움. 시스템 관점에서 어떤 제약이나 한계가 존재하는지 설명.Forces (제약 요인)문제 해결을 어렵게 만드는 상충되는 요구사항이나 시스템 제약. 예: 지연 시간 vs 일관성Solution (해결책)문제를 해결하기 위한 일반적인 설계 방식 또는 전략. 구성 요소와 흐름 등을 포함.Structure (구조)구성 요소 간의 관계를 나타내는 다이어그램 (예: Mermaid, UML 등).Resulting Context (결과 맥락)패턴 적용 이후의 시스템 특성. 해결된 점과 새롭.. 2025. 5. 24.
스타트업이 RDBMS 대신 선택한 조합: 디프로모션의 AWS 아키텍처 도입기 스타트업에게 있어 기술 스택 선택은 곧 서비스의 속도, 확장성, 그리고 생존력에 직결되는 중요한 문제입니다. 특히 데이터베이스 아키텍처는 초기 개발 속도와 향후 확장 가능성을 동시에 고려해야 하는 까다로운 결정이죠.오늘은 프로모션 기반 사용자 참여 플랫폼인 디프로모션이 어떻게 DynamoDB, OpenSearch, ElastiCache Serverless의 조합을 통해 기존 RDBMS 기반 구조의 한계를 극복했는지 소개해드리겠습니다.왜 RDBMS만으로는 부족했는가?디프로모션의 초기 구조는 전통적인 RDBMS에 기반하고 있었지만, 몇 가지 한계에 직면했습니다:복잡하고 유동적인 데이터 구조: 프로모션별로 다양한 형태의 데이터를 처리해야 하는데, 고정된 스키마 구조를 가진 RDBMS는 자주 변경되는 요구사항에.. 2025. 5. 22.
기존 GUID(UUID) 데이터베이스 Primary Key 사용: 특징과 고려사항 기존 GUID(UUID) 데이터베이스 Primary Key 사용: 특징과 고려사항안녕하세요. 오늘은 이전에 흔히 사용되던 GUID(Globally Unique Identifier) 또는 UUID(Universally Unique Identifier)의 특징과 이를 데이터베이스의 Primary Key(PK)로 사용할 때 고려해야 할 점들에 대해 이야기해 보겠습니다.1. GUID(UUID)란 무엇인가?GUID는 128비트로 구성된 고유 식별자입니다. 기본적으로 랜덤하게 생성됩니다. 이는 여러 시스템에 걸쳐 충돌할 확률이 매우 낮은 고유한 값을 만들기 위해 고안되었습니다.2. GUID의 사용 목적: 왜 랜덤한 ID가 필요했나?GUID가 등장한 가장 큰 이유는 대규모 트래픽 환경 때문입니다. 일반적인 환경에서는.. 2025. 5. 18.
GC 알고리즘별 Minor GC와 Survivor 영역의 동작 비교 정리 이 문서는 G1GC의 Minor GC 동작 원리, Survivor 영역의 역할, 그리고 다른 GC 알고리즘에서의 Survivor 처리 방식을 비교하며 정리한 내용입니다. 각 GC 방식의 힙 구조, GC 트리거 조건, STW 여부 등을 상세히 설명하고, 어떤 상황에서 Survivor가 사용되는지를 중심으로 핵심 내용을 요약합니다.1. G1GC의 Minor GC힙 구조G1GC는 힙을 Region 단위로 나눔Young Generation은 여러 개의 Eden + Survivor Region으로 구성됨Minor GC 트리거Eden 영역이 가득 차면 Minor GC 발생Survivor가 가득 차는 건 트리거 요인은 아님 (대신 promotion failure 발생 가능)Minor GC 시 동작Eden에 있는 살아.. 2025. 5. 17.
객체 Churn(Object Churn)이란? 객체 Churn(Object Churn)이란?객체 churn은 JVM 메모리 영역에서 객체가 빠르게 생성되고 빠르게 소멸하는 활동을 의미합니다. 쉽게 말해, 단명 객체(short-lived objects)가 빈번히 생성되고 가비지 컬렉션 대상이 되는 상황을 말합니다. 예시for (int i = 0; i 이런 패턴에서는 엄청난 수의 객체가 Young Generation에서 짧은 시간에 생성되고 사라지며, 이로 인해 GC가 자주 발생합니다.객체 Churn이 높은 애플리케이션 예REST API 서버에서 요청마다 새로운 DTO, Map, JSON 객체 생성고속 로그 수집 시스템Kafka 메시지 처리, 실시간 스트림 처리Web framework에서 request/response 객체 반복 생성왜 중요할까?객체 c.. 2025. 5. 17.
Java GC의 역사와 진화: STW에서 동시 수집으로 1. 자바 GC의 발전 흐름Java의 GC(Garbage Collection)는 프로그램 내에서 사용되지 않는 객체를 자동으로 정리해주는 메모리 관리 메커니즘이다. 초기 GC는 단순하지만 응답 지연이 길었고, 이후 다양한 GC 알고리즘들이 등장하면서 처리량(Throughput), 지연시간(Latency), 오버헤드(Overhead)의 균형을 지향하게 되었다.발전 흐름 요약Java의 GC는 초창기부터 Young / Old 세대를 구분하는 Generational GC 구조를 갖고 있었으며, Serial GC와 Parallel GC에서도 이 구조는 동일하게 적용되었다. 이후 응답 지연(latency)을 줄이기 위한 병행 수집(concurrent collection) 전략이 CMS부터 도입되었고, G1에서는 r.. 2025. 5. 17.
JVM 메모리 구조, PermGen → Metaspace 전환, Spring Bean Scope와 CGLIB의 연관성 이 문서에서는 JVM의 세대별 메모리 구조와 PermGen에서 Metaspace로의 전환 이유를 설명합니다. 또한 Spring의 Bean Scope와 CGLIB 프록시가 Metaspace 사용에 어떤 영향을 미치는지 실무 관점에서 다룹니다. 프록시 기반 AOP와 스코프 설정이 메모리 누수에 어떻게 연결되는지도 함께 살펴봅니다.1. JVM의 세대별 메모리 구조JVM은 힙 메모리를 다음과 같이 세대(Generation) 단위로 구분하여 가비지 컬렉션(GC) 성능을 최적화한다.1.1 Young Generation새롭게 생성된 객체가 저장되는 영역.Eden, Survivor(S0/S1) 영역으로 구성됨.대부분의 객체는 이 영역에서 생성되고 소멸되며, GC가 자주 발생하는 특징이 있음.1.2 Old (Tenu.. 2025. 5. 17.
JVM 메모리 구조 GeeksforGeek 사이트의 Java Memory Management란 글을 번역했습니다. 일부 내용을 의역했기 때문에 어색하거나 틀린 내용이 있으면 댓글에 남겨주시거나 위 링크에 접속해서 확인하세요. 번역 과정에서 일부 제가 강조하고 싶은 단어(몰랐던 단어)는 괄호로 표시 합니다. 번역이 힘들었던 부분은 아래에 원문을 별도로 기재합니다. JVM 메모리 구조: JVM을 프로그램이 실행되는 동안 사용되는 다양한 런타임 데이터 영역을 정의합니다. 몇몇 영역은 JVM에 의해 생성되는 반면 몇몇은 프로그램에서 사용되어지는 쓰레드에 의해 생성됩니다. 그러나 JVM에의해 생성된 메모리영역은 JVM이 종료될 때만 회수됩니다. 쓰레드의 데이터영역은 인스턴트화(instantiation)되는 동안 생성되고 쓰레드가 종.. 2022. 7. 29.
Spring Data JPA 2.4.15 Document Memo 여는 글 이 글은 Spring Data JPA 2.4.15 도큐먼트를 읽고 인상 깊었던 내용 일부만을 무자비한 의역 및 관련 개념을 정리하는 글 입니다. https://docs.spring.io/spring-data/jpa/docs/2.4.15/reference/html/#reference 4. Working with Spring Data Repositories 스프링 데이터 리포지토리 추상화의 목표는 데이터 액세스 레이어를 구현하는데 필요한 많은 보일러플레이트 코드를 막대하게 줄이는 것이다. 4.1. Core concepts 스프링 데이터 리포지토리 추상화의 중심이 되는 인터페이스는 Repository 입니다. 리포지토리는 관리 하기 위한 도메인 클래스와 아이디 타입을 가집니다. 이 인터페이스는 주로 .. 2022. 6. 14.