[MSA] SAGA 패턴은 무엇?
·
스케쥴/스터디
1. MSA에서의 트랜잭션 문제   - 분산 환경에서 단일 DBMS의 트랜잭션 기능으로 해결 불가   - Two-Phase Commit의 한계: 성능 문제, 서비스 간 통제 어려움2. SAGA 패턴   - 정의: 마이크로서비스 간 이벤트 교환으로 분산 환경에서 원자성 보장   - 특징: 트랜잭션 관리 주체가 Application, 최종 일관성 달성3. SAGA 패턴의 종류   a) Choreography-based SAGA      - 각 서비스가 자체적으로 트랜잭션 관리, 이벤트 발행      - 장점: 구성 용이      - 단점: 전체 트랜잭션 상태 파악 어려움   b) Orchestration-based SAGA      - 중앙 Saga Manager가 트랜잭션 조정      - 장점: 구현/테..
[항해99 취업리부트 WIL] 8주차
·
스케쥴/스터디
Weekly I Learned: 이벤트 드리븐 아키텍처로의 전환과 나의 예약 조회 API 구현이번 주에는 기존의 모놀리식 아키텍처를 이벤트 드리븐 아키텍처로 전환하는 과정에서 많은 것을 배웠습니다. 특히 나의 예약 조회 API를 구현하면서 여러 가지 도전과 해결책을 경험했습니다.1. 한 주 동안 학습한 것들 나열이벤트 드리븐 아키텍처의 기본 개념과 구현 방법Kafka를 이용한 마이크로서비스 간 비동기 통신Redis를 활용한 캐싱 전략Server-Sent Events (SSE)를 이용한 실시간 데이터 전송분산 시스템에서의 데이터 일관성 유지 방법2. 학습한 내용의 구현 필요성기존의 모놀리식 아키텍처에서는 단일 데이터베이스를 사용하여 예약 정보를 쉽게 조회할 수 있었습니다. 하지만 마이크로서비스 아키텍처로 ..
[항해99 취업리부트 WIL] 7주차
·
스케쥴/스터디
모놀리식 아키텍처에서 이벤트 드리븐 아키텍처로1. 한 주 동안 수행한 작업예약 서비스 (Reservation Service)의 이벤트 드리븐 아키텍처로의 전환Kafka 설정 추가: Kafka 프로듀서와 컨슈머 설정을 추가하여 예약 서비스가 이벤트를 주고받을 수 있도록 준비.이벤트 클래스 작성: ReservationRequestedEvent, SeatStatusUpdatedEvent, PaymentCompletedEvent 등 예약과 관련된 이벤트 클래스를 작성.예약 요청 처리 변경: 예약 요청이 들어오면 ReservationRequestedEvent 이벤트를 Kafka를 통해 전송하도록 변경.좌석 상태 업데이트 처리: SeatStatusUpdatedEvent 이벤트를 수신하여 좌석 상태를 업데이트하고 예..
[항해99 취업리부트 WIL] 6주차
·
스케쥴/스터디
리팩토링 및 CI/CD 최적화1. 개요지난 2주 동안, 시스템 리팩토링과 CI/CD(Continuous Integration/Continuous Deployment) 최적화 작업에 중점을 두고 다양한 기술과 방법을 학습하고 적용하였습니다. 주요 학습 내용은 시스템 성능 향상, 코드 유지보수성 개선, 이벤트 기반 아키텍처 도입, 데이터 무결성 보장, 그리고 CI/CD 파이프라인 구축을 포함합니다.2. 주요 리팩토링 작업2.1 ReserveRequest 리팩토링배경: 결제 생성 요청 로직이 Reservation 엔티티에 포함되어 있어 단일 책임 원칙(SRP)에 위배되었습니다.변경 내용: 결제 생성 요청 로직을 Reservation에서 ReserveRequest로 이동하였습니다.기존: 결제 생성 로직이 Res..
[항해99 취업리부트 WIL] 5주차
·
스케쥴/스터디
Week In Learning (WIL) - 지난 두 주간의 학습 정리 주간 학습 목표: 지난 두 주 동안 MySQL 데이터베이스 설정, Docker를 활용한 개발 환경 구성, Spring Security와 JWT 인증, 이메일 인증 구현, 그리고 사용자 마이페이지 및 비밀번호 수정 기능을 학습했습니다. 첫째 주: MySQL 데이터베이스 설정:     Docker Compose를 활용한 MySQL 컨테이너 설정.     docker-compose.yml, Dockerfile, my.cnf, 초기화 스크립트 등을 통해 MySQL 환경 구성. 문제 해결:     Base64..
[항해99 취업리부트 TIL] 4주차 4일
·
스케쥴/스터디
오늘 학습한 내용은 무엇인가요?적어도 대부분의 배수문제 요약: 주어진 정수 배열에서 세 수의 조합을 생성하고, 이 조합들 중 최소 공배수를 계산하여 가장 작은 최소 공배수를 찾는 문제입니다.해결 방법 요약:입력 처리:버퍼에서 입력을 읽어와 정수 배열로 변환합니다.조합의 크기 계산:조합 공식인 ( N! / ((N-R)! \times R!) )를 사용하여 조합의 크기를 계산합니다.조합 생성:세 수의 모든 조합을 생성하고 배열에 저장합니다.최소 공배수 계산:생성된 각 조합에 대해 최소 공배수를 계산하고, 결과를 배열에 저장합니다.최소값 찾기:최소 공배수 배열에서 가장 작은 값을 찾아 출력합니다.public class Main { public static void main(String[] args) thr..
[항해99 취업리부트 TIL] 4주차 3일
·
스케쥴/스터디
학습한 내용은 무엇인가요?동적 프로그래밍(DP) 알고리즘 개요DP는 문제를 작은 하위 문제로 나누어 해결한 후 그 결과를 결합하여 원래 문제를 해결하는 기법이다.두 가지 특징:중복되는 하위 문제최적 부분 구조구현 방식:탑다운(메모이제이션)바텀업(테이블화)피보나치 수열피보나치 수열은 DP의 대표적인 예제이다.점화식: F(n) = F(n-1) + F(n-2)초기 조건: F(0) = 0, F(1) = 1탑다운 방식재귀와 메모이제이션을 이용해 구현.중복 계산을 피하기 위해 이미 계산된 결과를 저장.int[] memo = new int[n + 1]; 배열을 -1로 초기화.fib(n, memo) 함수 호출:if (n if (memo[n] != -1) return memo[n];memo[n] = fib(n - 1, ..
[항해99 취업리부트 TIL] 4주차 2일
·
스케쥴/스터디
오늘 진행된 강의에서 학습한 내용은 무엇인가요?블랙잭 - 2798번설명이 문제에서는 주어진 카드 중에서 3장의 합이 목표 숫자 M을 넘지 않으면서 최대한 M에 가까운 값을 찾는 것입니다. 이를 위해 모든 가능한 3장의 카드 조합을 확인하는 브루트 포스 접근법을 사용합니다.해결 방법입력 처리: 카드의 개수 N, 목표 숫자 M, 카드 목록을 입력받습니다.3중 루프 탐색: 세 개의 중첩된 for 루프를 사용하여 모든 3장의 카드 조합을 탐색합니다.최대값 갱신: 각 조합의 합이 M을 넘지 않으면서 지금까지 최대값보다 크면 이 값을 업데이트합니다.출력: 모든 조합을 탐색한 후, 최대값을 출력합니다.코드public class Main { static BufferedWriter bw = new BufferedW..