[TIL] 장애대응
·
TIL
데드락이란? 두 개 이상의 트랜잭션이 서로가 점유하고 있는 자원을 기다리면서 영원히 대기 상태에 빠지는 상황을 의미한다.해당 트랜잭션들은 더 이상 진행될 수 없고, 시스템 성능에 큰 영향을 미친다. 예시)스레드 1이 아이템 1을 가져오고 아이템 2를 가져와야 한다.스레드 2는 아이템 2를 가져오고 아이템 1을 가져와야 한다.  스래드 1이 아이템 1을 가져오는 것과 스레드 2가 아이템 2를 가져오는 것은 성공했다. 스레드 1의 다음단계인 아이템 2 가져오기와 스레드 2의 다음단계인 아이템 1 가져오기는 서로 맞물려 있어서 대기에 빠지게 되고 데드락이 발생한다. 해결 방법) 타임아웃 설정으로 무한 대기 상태에 빠지게 되는 걸 막고 데드락 상태를 빠르게 탐지하여 해결한다. 복제지연이란? 데이터가 쓰기 DB에..
[TIL] DB Lock | 비관적 락 (Pessimistic Locking) | 낙관적 락 (Optimistic Locking)
·
TIL
DB Lock 이란? 데이터베이스에서 여러 트랜잭션이 동시에 같은 데이터에 접근할 때, 데이터의 무결성을 보장하기 위해 사용되는 메커니즘이다.쉽게 말하면, 작업중인 데이터는 건들 수 없게 만드는 것!!이다. 이를 통해 충돌을 방지하고 데이터의 일관성을 유지 할 수 있다.  비관적 락 실습 비관적 락은 데이터를 읽을 때부터 락을 걸어 다른 트랜잭션이 접근하지 못하도록 하는 방식으로 데이터의 충돌 가능성이 높을 때 유용하다. public interface ItemRepository extends JpaRepository { @Lock(LockModeType.PESSIMISTIC_WRITE) // 비관적 락 적용 @Query("select i from Item i where i.id = :id")..
[TIL] Session Clustering
·
TIL
사용자가 증가함에따라 하나의 서버로 사용자의 요청을 감당하기 어려워져 Spring Boot 서버를 여러개 사용할 때 각 서버들에게 요청을 분산하여 부하를 줄일 수 있다 (Load Balancing) 이런 방식의 확장을 Scale-Out이라고 부른다. (서버의 개수를 늘림)(서버 자원의 크기 자체를 높이는 방식의 확장은 Scale-Up이라고 부른다.)  사용자가 A서버로 요청을 했다가, B 서버로 요청을 하게 된다면 세션은 어떻게 유지 될까?(세션 : 상태를 저장하지 않는 HTTP 통신을 사용하면서, 이전에 요청을 보낸 사용자를 기억하는 상태를 유지하는 것) 여러 서버를 가동하게 되면, 세션의 정보를 서버 내부에서 관리하기 어려워지는데.. 이에 따른 대안을 알아보자.  Sticky Session 특정 사람..
[TIL] 모니터링
·
TIL
모니터링이란 시스템의 성능, 안정성 및 가용성을 실시간으로 관찰하고 측정하는 과정을 의미한다.잠재적인 문제를 신속하게 발견하여 대응할 수 있다.  Spring Boot Actuator Spring Boot  애플리케이션의 상태 및 내부 동작을 모니터링하고 관리하기 위한 기능을 제공한다. # Actuator 엔드포인트를 19090 포트에서 서비스하도록 설정management.server.port=19090#모든 엔드포인트 노출 설정management.endpoints.web.exposure.include=*#헬스 체크 엔드포인트 상세 정보 표시 설정# 이 설정은 /actuator/health 엔드포인트에서 헬스 체크 정보를 항상 상세히 보여주도록 설정합니다. 기본적으로, 헬스 체크 엔드포인트는 요약된 상태..
[TIL] SAGA Pattern
·
TIL
SAGA 패턴이란? 분산 시스템에서의 데이터 일관성을 유지하기 위한 패턴으로 마이크로서비스 아키텍처에서 중요한 역할을 한다.장기 실행되는 트랜잭션을 처리하고, 실패 시 롤백하거나 복구하는 방법을 제공하여 시스템의 신뢰성과 안정성을 높인다.  SAGA: 복잡한 비즈니스 트랜잭션을 여러 개의 작은 트랜잭션으로 나누어 실행. 각 작은 트랜잭션은 독립적으로 수행되며, 전체 트랜잭션이 성공적으로 완료되도록 보장한다.로컬 트랜잭션: 각 작은 트랜잭션은 개별적으로 성공하거나 실패할 수 있으며, 이들은 모두 로컬 트랜잭션으로 처리된다.보상 트랜잭션: 만약 어떤 작은 트랜잭션이 실패하면, 이전에 성공한 트랜잭션들을 보상하기 위해 보상 트랜잭션을 실행한다. 이를 통해 전체 트랜잭션의 일관성을 유지한다.조정자: SAGA 패..
[TIL] Kafka란?
·
TIL
Kafka란? 분산 스트리밍 플랫폼으로 주로 실시간 데이터 피드의 빅 데이터 처리를 목적으로 사용된다.대용량 데이터 스트림을 저장하고 실시간으로 분석하거나 처리한다. 기본 구성 요소메시지(Message) - Kafka를 통해 전달되는 데이터 단위프로듀서(Producer) - 메시지를 생성하고 Kafka에 보내는 역할, 특정 토픽에 메시지를 보낸다.토픽(Topic) - 메시지를 저장하는 장소. 메시지는 토픽에 저장되었다가 소비자에게 전달된다.파티션(Partition) - 토픽을 물리적으로 나눈 단위키(Key) - 메시지를 특정 파티션에 할당하는 데 사용되는 값컨슈머(Consumer) - 토픽에서 메시지를 가져와 처리하는 역할브로커(Broker) - Kafka 클러스터의 각 서버를 의미, 메시지를 저장하고 ..
[TIL] RabbitMQ 이해하기
·
TIL
8/13 진행사항✅ 알고리즘 1문제✅ 대규모 스트림 처리 1-1 ~ 1-8  RabbitMQ란? 메시지 브로커라는 소프트웨어로, 두 시스템 사이에서 메시지를 전달하는 역할을 한다.👉 데이터(메시지)를 송신자(프로듀서)로부터 수신자(컨슈머)에게 전달하는 중단 매개체. 기본 구성 요소Message - 전달하고자 하는 실제 데이터Producer - message를 생성하고 이를 RabbitMQ로 전송하는 역할Queue - message를 임시로 저장하는 장소Consumer - Queue에 있는 메시지를 받아 처리하는 역할Exchange - 프로듀서가 보낸 메시지를 적절한 Queue로 라우팅 하는 역할RabbitMQ는 AMQP 프로토콜을 사용하여 메시지를 관리하는 역할을 한다.AMQP) Advanced Mes..
[TIL] Docker란? | FeignClient DIP | Gateway FeignClient 순환참조
·
TIL
8/12 진행사항✅ 알고리즘 2문제✅ 프로젝트 관리 심화 강의✅ 과제 해설 강의 듣기 + 피드백 반영  Docker란? 애플리케이션을 쉽게 만들고 테스트하고 배포할 수 있게 도와주는 소프트웨어 플랫폼으로애플리케이션을 컨테이너라는 가볍고 이식성 있는 패키지로 실행할 수 있다. 특징컨테이너화 - 하나의 패키지로 묶어 어디서든 실행 가능경량 - 운영체제의 커널을 공유하므로 가상 머신보다 훨씬 빠름이식성 - 어디서든 동일하게 동작확장성 - 여러 개의 컨테이너를 효율적으로 관리하고 쉽게 확장주요 키워드이미지 - 애플리케이션과 모든 실행에 필요한 파일을 포함한 읽기 전용 템플릿, 정적인 템플릿컨테이너 - 이미지를 실행하여 동작하는 애플리케이션 인스턴스, 동적인 환경Dockerfile - 이미지를 생성하기 위한 명령..
[TIL] Spring Boot 로컬과 서버 환경 분리 | 정적 팩토리 메서드
·
TIL
8/9 진행사항✅ 알고르즘 2문제✅ 챕터1 과제수행  로컬과 서버 환경 분리  로컬&개발 환경과 운영환경을 분리하여 local 주소와 배포 주소로 접근하는 것을 목표로 한다. application.ymlspring: profiles: default: dev application: name: product-service jpa: properties: hibernate: show_sql: true format_sql: true use_sql_comments: true highlight_sql: trueserver: port: 19093management: tracing: sampling: probability:..
[TIL] Spring Boot 프로젝트에 캐싱 적용하기
·
TIL
8/9 진행사항✅ 알고리즘 5문제✅ 인메모리 저장소 및 캐싱 전략 1-5 ~ 2-4✅ 챕터1 과제 캐싱 기능 구현  Spring Boot 프로젝트에 캐싱 적용하기 1. build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // 레디스 추가 implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' ..