본문 바로가기
반응형

직장이 아닌 직업을 가지자!781

CQRS(=Command Query Responsibility Segregation)를 알아보자! 명령(Write)과 조회(Read)의 책임을 분리한다.왜 써야하지?제 경험으로는 장애가 한번 발생 했었는데 알람이 엄청나게 왔었습니다.상황은 어디에선가 엄청나게 호출을 하고 있었고 로그를 보니 사내에서 제공하는 Spark와 Hadoop을 지원하는 곳에서 호출을 하고 있었습니다.즉, 읽기 트래픽이 폭증하면서 Akka와 HBase RegionServer의 리소스(CPU, IO, 네트워크, 쓰레드, GC)가 읽기 때문에 많이 사용하고 있었고 그 결과 쓰기 요청들이 타임아웃/에러로 이어진 상황 이였습니다.하필 뉴스 컬렉션이라서..민감한 부분이였습니다. ㅠㅠ 한가지 문제로 인해 쓰기가 문제가 된것은 아닐것 입니다.Akka 자원 경쟁HBase RegionServer 자원 경쟁Data size도 커서 네트워크 문제 .. 2025. 11. 14.
코테준비) 간단 DFS를 풀어보자! 코딩테스트...준비하지 않으면 못풉니다ㅋㅋㅋ차근차근 준비를 해보아요!!! DFS : 너비 우선 탐색, 쭉~~따라가는 스타일!! 그래프 완전 탐색재귀함수로 구현, 스택자료구조 이용시간복잡도 : O(V + E) V : 노드 수E : 엣지 수 아래에서 N이 노드, M이 엣지 = O(1000 + 1000*(1000-1)/2) 1억정도 안넘으면 오케이!백준(연결 요소의 개수)https://www.acmicpc.net/problem/11724문제아래의 포맷으로 시작!! import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws Exception { BufferedR.. 2025. 11. 12.
Backoff Retry와 DLQ(Dead Letter Queue) 차이? 사용법? Backoff Retry와 DLQ 둘 다 재시도를 할 수 있는 친구들 입니다.무슨 차이가 있고 언제 사용하면 좋은지 알아보고 사용하면 좋을것 같습니다.Backoff Retry는 처리 실패시 일정 시간 대기(Backoff) 후 재시도하는 메커니즘 입니다.예를 들면 네트워크 지연이나 일시적인 장애(DB lock, 외부 api timeout) 같은 복구 가능한 오류에 사용 됩니다.동작 흐름Consumer → 메시지 처리 실패 → 1초 대기 → 재시도 → 또 실패 → 3초 대기 → 재시도 → 또 실패 → 10초 대기 → 재시도 → 성공 or DLQ 이동포인트재시도 간격을 점점 늘려서 시스템 부하를 방지 합니다.사용 예시kafka Consumer / 외부 API 호출 실패 시 재시도DLQ는여러번 재시도 했음.. 2025. 11. 11.
Redis에서 TTL이 expired(만료)되면 메모리에 데이터는 아직 있다? 없다? 동료들과 커피마시면서 이야기가 나온 내용인데 궁금해서 찾아보았습니다.정답은?! TTL 만료 != 즉시 메모리 해제Redis 메모리에는 존재하지 않는것 처럼 취급되지만 사실상 실제 메모리에서 삭제되는 것은 아니다!Redis는 TTL이 지난 키를 두 가지 방식으로 제거!1) Active Expiration(주기적으로 스캔) : Redis가 주기적으로 메모리를 스캔해서 만료된 키들을 삭제 serverCon이라는 내부에서 돌아가는 타이머 루프를 통해 스캔하고 제거하여 메모리를 관리 합니다. 2) Lazy Delete(게으른 만료) : 클라이언트가 GET/SET 등 키를 조회/갱신하려고 할 때 즉, 직접 접근 할 때 내부에서 만료체크를 하고 삭제를 진행 합니다. TTL이 만료된 key가 바로 삭제 되.. 2025. 11. 6.
동시성(Concurrency) 모델&스케줄링 모델(feat. ForkJoinPool) 2025.08.16 - [역량 UP!/Architecture] - C10K 문제(C10k Problem)란 무엇인가?Concurrency Models 5가지동시성 모델설명대표 기술Thread-based여러 스레드가 공유 메모리 사용Java Threads, ThreadPool, Spring MVCEvent-driven (이벤트 루프 기반)1개 또는 소수 스레드가 이벤트를 감지하고 처리Node.js, Redis, Netty, NginxMessage-passing / CSP공유 메모리 X, 채널로만 통신Go Goroutine + channelActor Model모든 게 Actor, 메시지로만 통신Akka, ErlangReactive StreamsNon-blocking + BackpressureWebFlux, .. 2025. 11. 4.
Blocking&non-Blocking 그리고 Sync&Async 이해하기! 개념을 쉽게 이해해보자!Blocking과 Non-BlockingCPU / 쓰레드 레벨의 개념Sync와 AsyncApplication(메소드 호출 흐름) 개념Blocking / Non-Blocking = 쓰레드와 CPU의 관계BlockingI/O 작업(Disk, Network)을 기다리는 동안 쓰레드가 멈춤CPU가 놀고 있음(idle 상태)CPU를 낭비! 일해야하는데 일하지 않고 놈!Non-BlockingI/O 요청 후 즉시 리턴, 나중에 완료되면 알려줌나중에 누가??하드웨어 I/O는 OS커널이 감지하고 알려줌어플리케이션 레벨은 EventLoop or ThreadPool이 Callback을 실행하며 알려 줌이것때문에 특징을 헷깔릴 수 있음주의!Non-Blocking + Async(Callbak) 조합!.. 2025. 11. 3.
GC(Garbage Collection)에 대해 알아봅시다! https://docs.oracle.com/javase/specs/jvms/se25/html/jvms-2.html#jvms-2.5Run-Time Data AreasThe pc RegisterJVM StackHeapMethod AreaRun-Time Constant(상수) PoolNative Method Stacks이 영역들 중에 GC(Garbage Collection)가 일어나는 영역은 Heap 영역 입니다.역으로 말하면 나머지 영역은 GC 대상이 아니라는 이야기!클래스 로더 서브 시스템클래스나 인터페이스를 JVM으로 로딩하는 기능을 수행1) Bootstrap ClassLoader : JVM 자체 제공, jdk핵심 클래스 로드 (/lib)2) Extentions ClassLoader : 확장 라이브러리 .. 2025. 10. 31.
Redis Single Thread, 싱글인데 왜 빠르지?? MSA 아키텍처에서 Redis가 싱글쓰레드를 이용해서 처리가 되기 때문에 원자성(atomic)보장! 즉, 데이터 정합성이 깨지지 않습니다!그래서 커머스 같은 곳에서는 재고처리를 Redis로 하는데..그런데 말입니다! 잘나가는 커머스는 대용량 트래픽 일텐데 이걸 버텨낸다?? 싱글쓰레드인데? 왜 성능이 좋은지 살펴보도록 하겠습니다. Redis의 성능적 비밀은? Multiplexing / Event Loop사실 아니 어떻게 싱글쓰레드가 대용량 트래픽을 받는다는거지? 라는 의문이 생겨서 찾아보게 되고 포스팅을 하게 되었습니다.알고봤더니 다이렉트로 싱글 쓰레드가 받아서 처리하는 구조가 아니였습니다!!위 그림의 I/O Multiplexing을 살펴봅시다!1) 클라이언트 : A,B,C 클라이언트가 동시에 Redis .. 2025. 10. 28.
대용량 데이터 처리 시 고려사항 대량 데이터 처리 시 고려사항은 단순히 빠르게 처리해야한다가 아니다. 아래의 5가지로 나눠볼수 있다.성능(Performance), 안정성(Stability), 정합성(Consistency), 확장성(Scalability), 데이터 품질(Data Quality)성능(Performance)대용량을 처리하는 프로세스는 아래 참고!2025.08.21 - [역량 UP!/Architecture] - 용어정리) OLTP, OLAP란?2016.09.28 - [OS/Linux&Unix] - BATCH, OLTP,OLAP,DW 정의Data의 특성에 맞게 처리를 해주면 됩니다.3가지 영역으로 보면Infra : Server를 늘려주거나(Scale-out), 네트워크(LB), CDN, Cache DB : 데이터 저장 구조라고 .. 2025. 10. 26.
Saga Pattern(outbox pattern) 좀 더 보기! 2025.10.24 - [역량 UP!/Architecture] - MSA에서 분산 트랜잭션 처리는?(Saga+outbox)위 내용을 토대로 아키텍처를 설계했는데Saga pattern중 오케스트레이션 말고 코레오그래피의 흐름을 따라가며 좀 더 보자!1) Outbox 테이블CREATE TABLE outbox ( id BIGINT PRIMARY KEY AUTO_INCREMENT, aggregate_type VARCHAR(40) NOT NULL, -- "ORDER","INVENTORY","PAYMENT" aggregate_id VARCHAR(64) NOT NULL, -- ex) orderId event_type VARCHAR(60) NOT NULL, -.. 2025. 10. 24.
MSA에서 분산 트랜잭션 처리는?(Saga+outbox) 내가 몰랐던 MSA의 특징?마이크로서비스를 하는 목적은? 개발하는 속도가 빠릅니다.조직으로 보면 하나의 서비스를 가지는 조직은 UI specialists, middleware specialists, DBAs이 모두 모여있는 조직 입니다.커뮤니케이션이 유연하고 빨라서 개발속도가 빠릅니다.즉, 기술적인 아키텍처만 변경하는게 중요한게 아니라조직의 구조나 조직의 의사결정방향, 조직의 개발문화 스타일이 변경되야 성공할 수 있습니다.그림 출처 : https://martinfowler.com/articles/microservices.htmlConway's law(콘웨이의 법칙)소프트웨어 아키텍처의 구조는 소프트웨어를 만드는 팀의 구조를 따라간다. 서비스의 세분화는?서비스화는 크게(모놀리스) 시작하며 분할(MSA) .. 2025. 10. 24.
18) ENS Project - 발주파일 변경 요청 요구사항지인이 업체별로 발주파일을 전달 하는데 반드시 양식에 맞춰서 보내야하는 업체가 있다고 함.귀찮으니 만들어달라고 요청이 들어옴!개발일정넉넉잡아 2시간! 카페로 출똥!개발애월언니 발주 시스템 추가범위 : 프론트/백엔드 수정!애월언니 계정 로그인 시에만 해당 메뉴가 보이도록 함!매핑체크// 업체받는분 받는분전화 받는분전화2(없으면 공란) 수화주주소 수량 보내는분 보내는분분전화 보내는분전화2(없으면 공란) 보낸분주소 물품명 배송메세지 물품크기// 네이버스토어결제일 옵션정보 수량 수취인명 구매자명 수취인연락처1 구매자연락처 통합배송지 최종 상품별 총 주문금액 배송메세지 상품주문번호 배송방법(구매자 요청) 상품종류 배송방법 택배사 송장번호 발.. 2025. 10. 10.
코테대비 문법정리 HashMap생성// HashMap 만들기Map map = new HashMap();값 추가map.put("apple", 3); // apple → 3 저장map.put("banana", 5); // banana → 5 저장map.put("apple", 10); // apple → 10 (덮어쓰기)값 읽기int v = map.get("apple"); // 10Integer x = map.getOrDefault("orange", 0); // 없으면 기본값 0boolean hasKey = map.containsKey("apple"); // true/false값 삭제map.remove("apple");map.clear(); // 모든 키·값 삭제반복// 1) 키 기준for (String key :.. 2025. 9. 18.
Codility Lesson 참고 투포인터/슬라이딩 윈도우 레슨15: https://app.codility.com/programmers/lessons/15-caterpillar_method/해시맵/배열 카운팅 기본(FrogRiverOne, MissingInteger)레슨4: https://app.codility.com/programmers/lessons/4-counting_elements/누적합·슬라이딩윈도우 (PassingCars)레슨5: https://app.codility.com/programmers/lessons/5-prefix_sums/스택( Brackets )레슨7: https://app.codility.com/programmers/lessons/7-stacks_and_queues/DP (MaxSliceSum)레슨9: htt.. 2025. 9. 18.
아마존의 사업개발 방법, Working backwards 거꾸로 일하기! 아마존의 거꾸로 일하기 프로세스!오래전에 언급된 프로세스인데 뭔지 궁금해서 찾아보았습니다.거꾸로 일하기는 제품에 대한 아이디어에서 시작합니다.즉, 고객의 시점에서 시작 합니다.1. 당신의 고객은 누구인가?2. 고객의 문제는 무엇이며 어떻게 해결할 것인가?3. 주요 고객이 얻는 이익은 무엇인가?4. 고객의 니즈를 어떻게 채워줄 것인가?5. 고객 경험은 어떠해 보이는가?고객검토를 거쳐서 처음으로 하는 일이 내부 보도자료를 만드는 것 입니다.보도 자료 작성 / FAQ 작성 / 시각화보도자료 작성(Press Release)를 하다보면 마치 이미 사업이 진행된 것 처럼새로운 제품/서비스가 출시 된 것처럼 글을 작성하는 것 입니다.내용을 작성하다보면 자연스럽게 아이디어가 구체화되고 어떤 부분이 부족한지 알수 있습니.. 2025. 9. 11.
Codility Test 너무 간만에 문제를 풀어봅니다ㅋㅋ온라인 직무테스트 링크를 보니 Codility가 있어서 찾아보니 아래처럼 프로그래머스처럼 기업이 사용하는 코테 사이트가 있었습니다.coding test site : https://app.codility.com/programmers/특징으로는 영어로 문제가 나옵니다!문제1) A binary gap - Find longest sequence of zeros in binary representation of an integer.// you can also use imports, for example:// import java.util.*;// you can write to stdout for debugging purposes, e.g.// System.out.println(".. 2025. 9. 11.
Akka Classic ask Flow(Future/Promise)+ Distributed Data(feat. CRDT) Akka classic에서 소스를 보다보면 붕~뜬 느낌이 들곤 합니다.마치 Springframework에서도 내부적으로 동작하는 것들이 많은데(ex. DispatcherServlet) 이것을 알지 못하면 이해가 어렵습니다.그러므로 Akka 프레임워크에서 내부적으로 동작하는 액션을 파악해야합니다.1. Client가 Akka HTTP를 통해 접근2. 메시지가 들어오고 Route를 통해 어떤 Actor에게 보낼지 결정 합니다.3. Route핸들러에서 서비스 Actor에 메시지를 보냅니다. 3.1 ask(Future의 리턴이 있는) 메소드를 사용하게 되면 4. Akka는 내부적으로 Future를 리턴 시킵니다. 5. 또한 내부적으로 한쌍인 비어있는 promise와 replyTo Actor를 메시지에 담아.. 2025. 9. 4.
SOA 서비스 지향 아키텍처(Service Oriented Architecture) 마이크로 서비스의 근간이 되는 SOA아키텍처를 통해서 아키텍처의 발전과 실패원인을 분석하여 인사이트를 얻자!세부 구현기술은 변했지만 MSA등 분산 시스템의 아키텍처 사상은 그래도 반영 됨.SOA의 본질적인 개념을 파악하여 대용량 시스템 구현에 활용하자!1. SOA(Service Oriented Architecture)란? 서비스 단위로 기능을 쪼개서 재사용하자! 2000년대 초반 대기업·금융권에서 유행했던 아키텍처 입니다.Business Service주문, 결제, 배송 같은 업무 단위 서비스Task Centric Service특정 업무 단계에 집중한 서비스Entity Centric Service고객, 상품 같은 데이터 중심 서비스Intermediary Service (중간 서비스)아키텍처에 유연성을 더해.. 2025. 8. 26.
비동기 아키텍처(=Asynchronous Architecture) 비동기처리메세지 큐를 기반(MQ, RABBIT MQ, KAFKA, SQS etc)응답을 기다리지 않고 바로 리턴큐 뒤에 다수의 워커가 메세지를 읽어서 처리(워커수를 조정하여 대용량 처리가 용이)비동기 처리 메세지 패턴Fire&Forgetpattern : Producer가 메세지를 그냥 큐에 던져놓고 응답 안 기다림소비여부는 신경 안씀일반적인 MQ 모델에 가까움Producer -> Queue -> Consumerex) ActiveMQ, SQS, RabbitMQ의 기본 Queue Publish&Subscrbepattern : Producer가 메시지를 발행(Publish)하면, 여러 Consumer들이 각각 구독(Subscribe)해서 받아감같은 메세지를 여러 Consumer가 동시에 받을 수 있음.ex) .. 2025. 8. 21.
용어정리) OLTP, OLAP란? OLTP랑 OLAP은 데이터베이스를 쓰는 목적에 따라 나눈 개념OLTP (Online Transaction Processing) → 실시간 거래 처리용OLAP (Online Analytical Processing) → 분석용 OLTP (온라인 트랜잭션 처리)앱/서비스에서 사용자가 직접 쓰는 DB특징빠른 읽기/쓰기 성능이 중요함데이터는 정규화해서 중복 최소화 (INSERT/UPDATE 잦음)하나의 요청(주문, 결제, 로그인 등)을 빠르고 정확하게 처리해야 함예: 은행 송금, 쇼핑몰 주문, 로그인 처리 OLAP (온라인 분석 처리)경영진/분석가가 통계를 내는 DB특징대량의 데이터를 모아 복잡한 조회·집계를 수행데이터는 비정규화/스타 스키마로 저장 (JOIN 최소화, SELECT 위주)쓰기보단 읽기가 대부분,.. 2025. 8. 21.
5) nonos(No No Stress) - 발주처리 기능! 발주처리 기능 테스트https://youtu.be/Wo-7BgyFcfU?si=A5IZoG1cJykYgZ0U 발주 기능은 일단 요렇게! WILL-DO로는 READY상태에서 ORDERED상태로 변환할 때 실제 NaverStore API를 통해서 배송준비 상태로 주문상태를 변경해줘야 함.(신규주문 to 배송준비)그 이후 송장 업데이트를 한 뒤 배송 중으로 업데이트 해줘야 함.위 영상에서는 일단 엑셀처리를 한 내용이며 1) NaverStore API를 통해서 상태변경을 하는 작업2) Ordered 데이터들을 모아서 발주처리를 해야 함.3) 주문건수가 많을 경우 여러번에 거쳐서 상태변경을 해야 함.발주 대상을 모아주는 처리와 발주를 처리 하는 부분을 따로 개발?아니면 그냥 사라지게 만들고 마지막에 발주버튼을 클릭.. 2025. 8. 19.
반응형