본문 바로가기
728x90

전체 글157

bitnami redis cluster 로 local 개발용 도커컨테이너 생성 시 image pull error 운영단에 redis 클러스터를 개발 하기 위해서는 로컬 개발환경도 구성할 필요가 있다.아래와 같이 간단하게 클러스터를 생성해서 사용했었다! services: redis-node-0: image: docker.io/bitnami/redis-cluster:latest ports: - 6479:6479 - 16479:16479 volumes: - ./data2/redis-cluster_data-0:/bitnami/redis/data environment: - "REDIS_PORT_NUMBER=6479" - "REDIS_PASSWORD=1234" - "REDIS_CLUSTER_DYNAMIC_IPS=no" - "REDIS_CL.. 2025. 10. 29.
10) Kafka 기반 도메인 분리 (4) Transactional Outbox 패턴이란? 1. CAP 이론 이란? 1) 정의 - 분산 시스템에서 동시에 만족할 수 없는 세 가지 특성을 설명하는 이론 - 2000년 Eric Brewer가 제안 → "Brewer’s theorem" 2) 세 가지 요소 - C (Consistency, 일관성) : 모든 노드가 동시에 같은 데이터를 보며, 어떤 노드에서 읽든 항상 최신 데이터가 보장됨 - A (Availability, 가용성) : 모든 요청에 대해 항상 응답을 돌려줌, 다만 최신 데이터일 필요는 없음 - P (Partition Tolerance, 파티션 허용성) : 네트워크 장애나 노드 분리 상황(P.. 2025. 9. 20.
10) Kafka 기반 도메인 분리 (3) Saga 패턴이란? 1. Saga 패턴이란? : Saga 패턴은 분산 트랜잭션을 여러 개의 로컬 트랜잭션(Local Transaction) 시퀀스로 나누어 처리하고, 만약 실패 시 보상(Compensation) 작업을 통해 전체 일관성을 맞추는 패턴.2. 동작 방식 1) 하나의 비즈니스 프로세스 = N개의 로컬 트랜잭션 2) 각 로컬 트랜잭션은 자신의 DB에서 커밋됨 → 분산 락 불필요 3) 중간에 실패하면, 이미 완료된 트랜잭션을 보상 트랜잭션으로 되돌림 3. 구현 방식 1) Choreography (코레오그래피) - 이벤트 기반 - 각 서비스가 이벤트를 발행하고, 다른 서비스가 그 이벤트를 구독하여 다음 트랜잭션 실행 - 장점: 단순,.. 2025. 9. 20.
10) Kafka 기반 도메인 분리 (2) 결제 시 쿠폰도메인을 완전하게 분리하기 1. 도메인 분리를 왜 해야할까?(feat. 트랜젝션 분리) 2. Kafka 를 도메인 분리에 이용방법은? 3. 분리했을때 발생되는 문제점? kafka 를 통한 정합성보장 롤백처리 2025. 9. 20.
10) Kafka 기반 도메인 분리 (1) Kafka 란? 1. Kafka 란? : Apache 재단에 등록된 오픈소스로써, 분산형 스트리밍, 대규모 트래픽처리, 대용량 데이터 처리를 원활하게 처리하기 Message Queue https://kafka.apache.org/ Apache KafkaApache Kafka: A Distributed Streaming Platform.kafka.apache.org 2. Kafka 최근 근황 및 구조 - kafka 의 구성은 main 의 역할인 kafka와 헬스체크 등 보조적인 역할인 zookeeper 가 있음.- Apache Kafka 3.3 버전부터는 KRaft 를 합의 프로토콜로 공식 지정 함.(자체 메타 관리 가능)- 4.0 버전부터는 Zookeeper 를 완전히 제거 함.- 하지만, 대규모 기업 고객 대부.. 2025. 9. 20.
9) Spring 캐시 (4) Redis 로 캐싱 관리 1. 기존 코드에서 수정이 필요한 내용 1) 추상화된 공통 API 제공 - @Cacheable, @CachePut, @CacheEvict, @Caching 같은 어노테이션을 제공 - 개발자는 캐시 라이브러리(Caffeine, Redis, Ehcache 등)를 몰라도 동일한 방식으로 사용 가능 2) 기존 소스 위치 2. 구현체만 Caffeine 에서 Redis 로 변경 Spring 캐시로 인해 추상체는 그대로 둔채 구현체만 변경가능! 2025. 9. 20.
9) Spring 캐시 (3)redis란? 1. Redis 란? : C언어로 구현된 Key value 기반의 data 저장소(nosql) 이자, pub sub 이 지원 되는 Message Queue 2. Redis 는 어떻게 동작할까? : Redis 핵심 서버 엔진은 단일 쓰레드, 논블로킹 이벤트 루프로 동작 ( 클라이언트 요청 → 이벤트 루프 → 명령 실행 → 응답 하는 구조임) - 이벤트 루프란? 1) 클라이언트가 요청을 보냄 → 소켓 이벤트 감지 2) 이벤트 루프가 해당 명령을 싱글 스레드에서 바로 실행 (대부분의 명령은 메모리 연산이므로 바로 처리 가능) 3) 처리 결과를 바로 클라이언트 소켓에 기록 (별도 스레드 없이도 논블로킹 소켓 사용 가능) .. 2025. 9. 20.
9) Spring 캐시 (2)분산 캐시란? 1. 로컬 캐시의 한계 1) 데이터 불일치(Inconsistency) - 서버 A, B, C가 각각 로컬 캐시를 들고 있을 경우, A에서 데이터가 갱신되더라도 B, C 캐시는 여전히 옛 데이터를 유지 - 분산 환경에서는 캐시 갱신 전파 불가능 2) 메모리 한계 - 캐시 데이터가 많아질수록 JVM Heap / 애플리케이션 메모리 부족(OutOfMemoryError 위험) - GC 부하 증가(애플리케이션 성능 저하로 까지 이어질 수 있음) 3) 확장성(Scalability) 부족 - 서버가 늘어날수록 각 서버가 동일한 데이터를 중복 캐싱(메모리 낭비) - 서버 수평 확장(Scale-out) 환경에서.. 2025. 9. 20.
9) Spring 캐시 (1) HomeBody 상품 리스트 구현 내 "로컬 캐싱" 추가 1. 로컬 캐시란? - 서버 내부 메모리(Heap) 에 데이터를 캐싱하는 방식. - 대표적으로 Caffeine, Guava, EhCache 같은 라이브러리를 사용. - 장점 1) 낮은 지연 시간: DB나 Redis까지 가지 않고 바로 응답 2) 구현 단순: 라이브러리 import 후 간단하게 적용 가능 3) 추가 비용 없음: 별도 캐시 서버 필요 없음 2. 스프링 캐시는? 1) 추상화된 공통 API 제공 - @Cacheable, @CachePut, @CacheEvict, @Caching 같은 어노테이션을 제공 - 개발자는 캐시 라이브러리(Caffeine, Redis, Ehcache 등)를 몰라도 동일한 방식으로 .. 2025. 9. 20.
8) 테스트 코드 작성 (2) 주문하기 기능을 대상으로 테스트 코드 작성 2025. 9. 20.
8) 테스트 코드 작성 (1)테스트 코드란? 2025. 9. 20.
알고리즘 별 자료구조 선택 Java Collection 을 권장 하는 경우1. 그래프 알고리즘 - 인접 리스트 표현할 때 : List> 또는 Map>로 사용List> graph = new ArrayList();for (int i = 0; i ());} - BFS나 DFS에서 큐(Queue queue = new LinkedList())나 스택을 쓰는 경우 //BFSQueue queue = new LinkedList();//DFSStack stack = new Stack(); 2. 우선순위가 필요한 경우 - 다익스트라(Dijkstra) 같은 최단경로 알고리즘 : PriorityQueue (최소 힙) 사용. PriorityQueue pq = new PriorityQueue.. 2025. 9. 15.
주요 알고리즘 1. 정렬(Sorting): 정렬은 가장 기본적인 알고리즘 문제 중 하나입니다. 다양한 정렬 알고리즘을 이해하고, 그 특성과 시간 복잡도를 고려하는 것이 중요합니다. 주요 알고리즘: - 버블 정렬(Bubble Sort): 인접한 두 값을 비교하여 정렬하는 단순한 방법입니다. 시간 복잡도: O(n^2). - 선택 정렬(Selection Sort): 배열에서 가장 작은 값을 찾아서 교환하는 방식입니다. 시간 복잡도: O(n^2). - 삽입 정렬(Insertion Sort): 이미 정렬된 부분에 새로운 값을 삽입하여 정렬하는 방식입니다. 시간 복잡도: O(n^2). - 퀵 정렬(Quick Sort): 분할 정복 알고리즘을 사용하여 데이터를 정렬합니다. 평균 시간 복잡도: O(n log n). - 병합 정렬(M.. 2025. 9. 14.
배열(Array) 배열의 특징: 배열은 고정 크기의 연속적인 메모리 공간으로, 동일한 데이터 타입의 여러 값을 저장할 수 있는 자료 구조Java에서 배열은 객체로 취급되며, 특정 데이터 타입의 값들을 저장하는 데 사용 예시코드import java.util.*;public class main { public static void main(String[] args) { arrayTest(); } public static void arrayTest() { int[] arrInt = new int[5]; // 크기 5인 int 배열 생성 arrInt[0] = 10; arrInt[1] = 20; arrInt[2] = 30; arrInt.. 2025. 9. 12.
Java 자료 구조(Collection, Map) Java Playgroundhttps://www.compilejava.net/ Online Java IDE www.compilejava.net Collection interface- 동적 크기: List, Set, Queue와 같은 Collection 구현체들은 동적으로 크기를 조정 가능- 유연한 데이터 처리: Collection은 데이터에 접근하거나 변경할 때 다양한 메서드와 기능을 제공합니다. 예를 들어, 요소 추가, 삭제, 크기 변경 등이 가능- 중복 허용 여부: Set은 중복을 허용하지 않으며, List는 중복을 허용 함- 다양한 컬렉션 타입: Collection은 List, Set, Queue 등 List- LinkedList: 삽입 삭제 등이 빈번할 경우 사용(data 의 순차적 처리가 중요.. 2025. 9. 10.
7) 주요 기능 개발(Back-end) 주요 기능 개발(Back-end)1. 로그인 로그아웃 2. Home body - 최초 진입 시 표시 되는 화면을 위한 기능 3. 상품(product) - 사용자가 상품조회(상품정보, 가격정보, 재고수량) 4. 장바구니(cart) - 상품을 선택하여 장바구니로 저장 - 장바구니 조회 5. 주문서(order) - 장바구니의 상품을 주문 하기위한 주문서 - Spring Feign을 이용하여 도메인 분리하기(cart 정보 가져오기) 6. 주문서 상세(orderDetail) - 주문서에 어떤 상품이 담겼는지 상품 detail 정보 (주문서가 총 정보가 기입되어있는 Header의 역할이고 주문서 상세는 Body의 역할) 7. 쿠폰(coupon) - .. 2025. 9. 2.
6) 개발 architecture (5) 강의용 Architecture 1. 강의에서 사용하는 아키텍처는? : 도메인 별로 분리를 고려하여, 레이어드 아키텍처와 EDA, 클린아키텍처(일부)를 종합하여 설계2. 새로운 Architecture 를 적용한 배경 1) 도메인 구분없이 개발할 경우 거대한 강결합이 발생할 수 있는 구조로 개발된다.3. 패키지 아키텍처 구조 및 Layer 설명presentation ├── api │ ├── controller // REST/gRPC 등 외부 요청 진입점 │ └── dto // Controller용 DTO (Request/Response) └── event │ └── consumer // Kafka, RabbitMQ 등 이벤트 수신 처리.. 2025. 9. 1.
Spring Boot warm up 순서 1. JVM & SpringApplication 시작 - main() → SpringApplication.run() 호출 - Spring Boot 내부에서 ApplicationContext, Environment 준비 2. Environment 준비 - application.yml / application.properties / OS env / JVM args 로드 - 이때 Redis, Kafka, DB의 연결 정보(URL, username, password, cluster info 등) 도 Environment에 로드됨 - 어떤 profile(local, dev, prod)을 쓸지도 결정됨 3. ApplicationContext 생성 & BeanDefinition 등록 .. 2025. 8. 31.
6) 개발 architecture (4) EDA(Event-Driven Architecture) 패턴 1. EDA 정의 (Event-Driven Architecture) : 이벤트 기반 아키텍처는 시스템 내 컴포넌트들이 이벤트를 중심으로 상호작용하도록 설계된 아키텍처 패턴 1) 한 서비스가 상태 변화나 특정 행동을 이벤트로 발행(publish) 2) 다른 서비스는 그 이벤트를 구독(subscribe) 하여 필요한 작업 수행 3) 전체 패키지 구조를 정하는 다른 아키텍처와는 달리, EDA는 타 아키텍처 기반에서 강결합과 비동기 등의부족한 부분을 보완할 수 있는 개발 패턴 중 하나 임 목표: "서비스 간 결합도를 낮추고, 확장성과 비동기 처리를 쉽게 만드는 것" 2. 핵심 구성 요소구성 요소역할Event시스템에서 발생한 사건 또는 메시지 (ex: O.. 2025. 8. 31.
6) 개발 architecture (3) 클린 아키텍처(Clean Architecture) 1. 클린 아키텍처 정의 : 클린 아키텍처는 도메인 중심 아키텍처로, 1) 비즈니스 규칙(Entity, Use Case)을 가장 안쪽에 두고, 2) 외부 의존성(웹, DB, 메시지 브로커, 프레임워크)을 바깥쪽에 둠 3) 의존성은 항상 안쪽으로만 향한다 (DIP: Dependency Inversion Principle)즉, 외부 기술은 교체 가능하고, 핵심 도메인은 독립적이라는 것이 핵심! 2. 구조 설명 1) Entities (Domain Model) - 순수한 비즈니스 규칙 (ex. Concert, User, Order 등) - 프레임워크에 전혀 의존하지 않는 POJO/POKO 2) Use Cases (Application S.. 2025. 8. 31.
728x90