Resilience4jJava에서 회복 탄력성을 관리하기 위한 라이브러리Circuit Breaker, Retry, Rate Limiter, Bulkhead 등 다양한 패턴 제공Circuit Breaker서비스 간의 실패를 관리하고 격리하는 데 사용특정 서비스가 일정 시간 동안 많은 실패를 하면 해당 서비스로의 호출 차단전체 시스템의 성능 저하 및 장애 방지상태Closed: 정상 상태. 모든 요청이 정상적으로 서비스로 전달Open: 실패율이 임계 값을 초과했을 때 서비스로의 호출 차단 모든 요청 즉시 실패Half-Open: 일정 시간이 지나면 일부 요청 허용해서 서비스가 정상으로 돌아왔는지 확인 → 성공하면 Closed, 실패하면 Open 상태로 전환설정slidingWindowSize: Circuit Br..
Intro서비스가 확장되면 데이터 통합 문제가 훨씬 더 복잡해진다.정보를 공유하기 위해서는 모든 데이터를 다른 시스템에 전송해야 하기 때문이다.여기서 데이터의 전반적인 형상이 변하면 어떻게 될까? 모든 연결과 데이터 추출을 위한 요청으로 인해 부하가 증가하게 될 것이다.여기서 Apache Kafka를 이용해서 스케일링할 수 있다.Kafka는 분산형이고 회복력 있는 아키텍처이며, 수평적 확장성이 있다.고성능이며 메세지 처리 규모가 매우 크다.(수백만/s) 활용 사례: 메시징 시스템, 활동 추적 시스템, 애플리케이션 로그 수집, 스트림 처리 등 1️⃣ 토픽, 파티션, 오프셋Kafka 토픽 ➡ Kafka 클러스터 안에 있는 데이터 스트림 즉, 데이터베이스의 테이블(제약조건X) ➡ 모든 종류의 메시..
Intro프로젝트 진행 중 순수 액세스 토큰만으로 로그인 및 로그아웃, 회원가입을 구현했더니액세스 토큰이 만료된 시점에서 갑자기 JWT 토큰이 만료됐다면서 모든 기능이 마비됐었다.인터넷 쿠키, 캐시 삭제도 해보고, DB를 싹 비워봐도 해결이 안 되길래 찾아 봤더니액세스 토큰만으로 이 기능들을 구현하기엔 불안정하다고 하더라.구체적으론 보안, 안정성, 사용자 경험 면에서 어려움이 있다고 한다.그래서 리프레시 토큰을 사용해서 액세스 토큰을 갱신하는 방식으로 진행했다.(문제 원인은 토큰 만료 후 후처리를 제대로 하지 않은 것 같다..)Refresh Token을 사용하는 이유액세스 토큰의 짧은 만료 시간 보완 ➡ 액세스 토큰은 보안 강화를 위해 짧은 만료 시간을 가진다. 사용자 입장에선 매우 불편하다. ..
Intro공식 문서 < 여기 여러 컨테이너를 결합하여 하나의 애플리케이션을 빌드하려면 매우 긴 명령어를 수행해야 한다. 여기서 Docker Compose라는 도구를 통해 다중 컨테이너 설정을 더 쉽게 관리할 수 있다. 설정 프로세스를 자동화 해주고, 단 하나의 명령과 하나의 구성 파일로 모든 컨테이너를 시작하고 제어할 수 있다.Docker Compose란?docker build와 docker run 명령을 대체할 수 있는 도구다수의 docker build, docker run을 단 하나의 구성 파일로 가짐오케스트레이션 명령 셋(set)하나의 명령을 사용하여 다중 컨테이너 애플리케이션을 시작 및 중단 가능다른 사람과 공유 가능Docker Compose는 Dockerfile을 대체하지 않는다. 오히려 Doc..
Intro코드를 변경할 때마다 이미지를 다시 빌드하지 않는 한 실행 중인 컨테이너에 변경 사항이 반영되지 않는다.이는 도커 이미지가 생성될 때 폴더의 스냅샷만 복사하므로, 복사한 뒤 발생하는 변경 사항은 컨테이너에 반영되지 않기 때문에 그런 것이다.하지만 개발 중에 도커를 사용한다면 변경 사항이 즉시 반영되는 것이 편할 것이다.(아니면 매번 리빌드해야된다,,😇)이를 바인드 마운트가 도와준다!볼륨과의 차이점컴퓨터의 파일 시스템 상의 어디에 위치해 있는지 알 수 있다. ➡ 컴퓨터 상에 매핑될 컨테이너의 경로를 설정하기 때문이다.소스 코드를 넣을 수 있다. ➡ 이렇게 하면 컨테이너가 인식해서 바인딩 마운트에서 코드를 복사한다. (최신 코드에 액세스 가능!)영구적이고 편집 가능..
기본 명령어명령어: 정보를 저장하기 위해 데이터베이스에 전송하는 문자열문자열 저장 (’Hi there!’)SET message ‘Hi there!‘Redis는 message를 확인해 키 또는 변수 이름으로 사용한다. Redis에 message라는 변수를 생성하는 것이다. 이후 ‘Hi there!’ 값을 할당한다.문자열 가져오기GET messageGET 명령어 다음의 단어를 확인해 변수 또는 키의 이름으로 사용한다. Redis에 저장된 키 중 message라는 키를 찾고, message를 찾아서 해당하는 값을 반환한다.GET과 SET 명령어는 문자열과 숫자만을 저장하는데 사용되는 간단한 명령어이다. Redis에 저장되는 데이터 타입은 리스트, 해시, 세트, 정렬 세트가 있다. 그리고 각 데이터 타입에 사용..
Redis의 특징데이터를 아주 빠르게 저장하고 조회할 수 있다.빠른 이유모든 데이터가 메모리에 저장된다.컴퓨터의 메모리 크기보다 더 큰 데이터셋을 가지고 작업하기 어렵다.데이터를 단순한 구조로 관리한다.연결 리스트, 셋, 해시 맵단순한 기능만 갖추고 있다.Redis를 사용하려면 제한된 공간에 데이터를 저장하는 방법을 이해하고, 단순한 자료 구조로 데이터를 관리하는 방법을 알아야 한다. 그리고 제한된 기능만을 가지고 작업하는 방법을 익혀야 한다.설정 - Redis Cloud에 인스턴스 생성Redis 페이지에서 데이터베이스를 생성하고 연결해보자.https://rbook.cloud/sheets/86519d62084d94f5 이제 Redis 명령어를 실행할 수 있게 되었다.
이제 이미지와 컨테이너 내부의 데이터를 관리하는 방법을 알아보자.이미지와 컨테이너가 다양한 방식으로 어떻게 데이터를 관리하는가?다른 폴더 등에 연결하는 방식도커에 내장된 볼륨이라는 개념에 대해 알아보자.데이터 카테고리 / 다양한 종류의 데이터 이해하기다양한 데이터 종류가 있고, 어떤 종류의 데이터를 가지고 있는지 이해해야 직면할 수 있는 문제를 이해할 수 있다.애플리케이션(코드 + 환경)임시 애플리케이션 데이터애플리케이션이 실행되는 동안 생성된 데이터웹사이트의 경우 입력된 사용자의 데이터가 바로 그 데이터.코드의 변수에 저장할 수 있으므로 메모리에만 저장되거나, 데이터베이스나 파일에 저장될 수 있다.컨테이너가 종료될 때 그 데이터를 잃어도 상관 없다.읽고 쓰기 전용 → 컨테이너에 데이터 저장 3. 영구..
이미지이미지는 Docker의 두 가지 핵심 구성 요소 중 하나(다른 하나는 "컨테이너")이미지는 컨테이너를 위한 청사진/템플릿이미지는 읽기 전용이며 애플리케이션과 애플리케이션 환경(운영 체제, 런타임, 도구 등)을 포함이미지는 자체적으로 실행되지 않으며, 대신 컨테이너로 실행될 수 있다.이미지는 사전 빌드된 이미지(예: DockerHub에서 찾을 수 있는 공식 이미지)거나 Dockerfile을 정의하여 직접 이미지를 빌드할 수 있다.Dockerfile에는 이미지가 빌드될 때 실행되는 명령어들이 포함되어 있으며( docker build . ), 각 명령어는 이미지에 레이어를 생성한다. 레이어는 이미지를 효율적으로 다시 빌드하고 공유하는 데 사용된다.CMD 명령어: 이는 이미지가 빌드될 때 실행되는 것이 아..