[내일배움캠프 사전캠프] 24회차 TIL(7/29 수) - RabbitMQ 구조 설계 및 이해, Kafka 개념 정리
·
심화_AI를 활용한 백엔드 아키텍처 심화 과정
RabbitMQ란?RabbitMQ는 서비스나 애플리케이션 사이에서 메시지를 전달하는 메시지 브로커(Message Broker) 이다.서비스가 다른 서비스를 직접 호출하는 대신 RabbitMQ에 메시지를 전달하면, RabbitMQ가 메시지를 Queue에 보관하고 해당 Queue를 구독하는 Consumer에게 전달한다.예를 들어 주문이 생성되었을 때 Order Service가 Product Service를 직접 호출하지 않고 RabbitMQ를 사용한다면 다음과 같은 구조가 된다.Order Service ↓RabbitMQ ↓Product Queue ↓Product ServiceOrder Service는 메시지를 생성해 RabbitMQ로 보내는 Producer 역할을 한다.RabbitMQ는 전달..
[내일배움캠프 사전캠프] 23회차 TIL(7/27 월) - 대규모 시스템 설계
·
심화_AI를 활용한 백엔드 아키텍처 심화 과정
대규모 시스템 설계대규모 시스템에서는 많은 사용자의 요청을 안정적으로 처리하면서도 장애에 대응할 수 있는 구조를 설계해야 한다.단순히 서버의 성능을 높이는 것뿐만 아니라 TPS, 캐싱, 데이터베이스 최적화, CQRS와 Event Sourcing, 모니터링 및 로깅, 배포 전략 등을 종합적으로 고려해야 한다.1. TPS와 시스템 처리량TPS(Transaction Per Second)란?TPS는 1초 동안 처리할 수 있는 트랜잭션의 수를 의미하며, 시스템의 처리량을 나타내는 주요 성능 지표 중 하나이다.예를 들어 특정 시간대에 초당 200건의 트랜잭션이 발생한다면 TPS는 약 200이라고 볼 수 있다.여기서 주의할 점은 TPS가 동시 접속자 수 자체를 의미하는 것은 아니라는 점이다.동시 접속자 수: 동시에 ..
★ MSA 총 정리 ★
·
MSA
MSA(Microservices Architecture) 총정리1. MSA란?MSA(Microservices Architecture)는 하나의 큰 애플리케이션을 여러 개의 작고 독립적인 서비스로 분리하여 개발하는 아키텍처 방식이다.각 서비스는 주문, 결제, 배송, 회원과 같이 특정 비즈니스 기능을 담당하며 독립적으로 개발, 배포, 확장할 수 있다.예를 들어 쇼핑몰 서비스를 MSA로 구성한다면 다음과 같이 나눌 수 있다.[회원 서비스][상품 서비스][주문 서비스][결제 서비스][배송 서비스]각 서비스는 서로 독립적으로 동작하며 HTTP API, 메시지 브로커(Kafka, RabbitMQ) 등을 통해 통신한다.MSA의 주요 특징독립적인 배포: 특정 서비스만 수정하여 별도로 배포할 수 있다.독립적인 확장: 트..
CQRS와 NoSQL의 정의 및 관계
·
Study
CQRS란?기존 단일 모델 방식의 한계일반적인 애플리케이션에서는 하나의 데이터베이스와 모델을 사용해 읽기와 쓰기를 모두 처리한다.서비스가 커질수록 다음과 같은 문제가 발생할 수 있다.복잡한 JOIN: 정규화로 데이터가 여러 테이블에 나뉘어 있어 조회 시 여러 JOIN이 필요할 수 있다.읽기와 쓰기의 요구사항 차이: 쓰기는 정합성과 트랜잭션이 중요하고, 읽기는 빠르고 간단한 조회가 중요하다.스키마 변경 비용 증가: 하나의 모델을 읽기와 쓰기가 함께 사용하면 변경 시 영향을 받는 범위가 커질 수 있다.CQRS란?CQRS(Command Query Responsibility Segregation)는 데이터의 쓰기(Command)와 읽기(Query) 책임을 분리하는 패턴이다.Command: Create, Upda..
[내일배움캠프 사전캠프] 22회차 TIL(7/24 금) - Spring Session, Redis Cache
·
심화_AI를 활용한 백엔드 아키텍처 심화 과정
Spring Session과 Redis를 활용한 세션 관리와 캐싱웹 애플리케이션을 하나의 서버에서 운영할 때는 세션 관리가 비교적 간단하다. 하지만 서버가 여러 대로 늘어나면 사용자의 세션 정보를 어떻게 공유할 것인지에 대한 문제가 발생한다.이번 글에서는 Spring Boot의 세션 관리부터 Sticky Session, Redis를 활용한 세션 공유, 그리고 Redis의 대표적인 캐싱 전략까지 정리해본다.1. JSESSIONID와 HttpSession일반적인 Spring Boot 애플리케이션에서 별도의 설정을 하지 않는다면 내장 Tomcat이 세션을 관리한다.사용자가 처음 서버에 접근해 세션이 생성되면 서버는 사용자에게 JSESSIONID라는 값을 쿠키로 전달한다.브라우저 │ │ 최초 요청 ▼..
[내일배움캠프 사전캠프] 21회차 TIL(7/23 목) - Redis
·
심화_AI를 활용한 백엔드 아키텍처 심화 과정
Redis란?Redis(Remote Dictionary Server)는 Key-Value 기반의 NoSQL 데이터베이스이다.가장 큰 특징은 데이터를 디스크가 아닌 메모리(RAM)에 저장하는 In-Memory Database라는 점이다.메모리에서 데이터를 읽고 쓰기 때문에 일반적인 데이터베이스보다 매우 빠른 속도를 제공한다.Redis의 특징In-Memory Database데이터를 메모리(RAM)에 저장하여 매우 빠른 조회 및 저장이 가능하다.기본적으로 메모리에 저장되므로 휘발성이지만, 필요에 따라 디스크에 데이터를 저장(Persistence)할 수도 있다.Key-Value 구조Key를 통해 데이터를 저장하고 조회한다.SQL을 사용하지 않고 Key를 이용해 데이터를 관리한다.다양한 자료구조 지원단순 문자열(..
[내일배움캠프 사전캠프] 20회차 TIL(7/22 수) - Docker, Docker-Compose
·
심화_AI를 활용한 백엔드 아키텍처 심화 과정
Docker Image, Docker ContainerDocker 이미지: Docker Container 서비스를 위한 이미지로, Container 런타임에 필요한 바이너리, 라이브러리 및 설정 값 등을 포함하고, 변경되는 상태값을 보유하지 않고 변하지 않는다. 따라서 불변성, 상태 저장이 없다.Docker Image와 Docker Container의 관계Image: 컨테이너에 대한 OS, Application, Library 등등의 정보를 담고 있음Container: Image를 실행한 상태. 1개의 Image로부터 N개의 Container를 생성할 수 있는 1:N의 관계. DockerfileDockerfile: APP을 컨테이너로 만들 때 이미지를 만드는 용도로 사용된다. 이를 통해 앱이 필요로 하는..
[내일배움캠프 사전캠프] 19회차 TIL(7/21 화) - Docker Image, Container
·
심화_AI를 활용한 백엔드 아키텍처 심화 과정
도커(Docker): 애플리케이션을 쉽게 만들고, 테스트하고, 배포할 수 있게 도와주는 소프트웨어 플랫폼도커 이미지(Image): 애플리케이션과 그 실행에 필요한 파일을 포함한 읽기 전용 템플릿으로 이미지 안에는 코드, 런타임, 라이브러리, 환경 변수, 구성 파일 등이 포함(상태 저장x, 불변성, 이미지 변경 필요 시, 새로운 이미지 생성 필요)도커 컨테이너(Container): Docker 이미지를 실행한 상태를 의미함. Image는 정적인 템플릿이라면, Container는 실제 애플리케이션이 실행되는 동적인 환경(격리된 환경)Dockerfile: 이미지를 생성하기 위한 스크립트로 이미지를 빌드하는데 필요한 명령어가 담긴 파일Docker Hub: Docker Image를 공유하고 저장하는 중앙 저장소볼..
[내일배움캠프 사전캠프] 18회차 TIL(7/16 목) - 스프링 컨테이너
·
심화_AI를 활용한 백엔드 아키텍처 심화 과정
1. Spring Bean(빈)Bean이란 스프링 컨테이너가 객체를 생성(new)하고 관리하며, 필요한 곳에 자동으로 주입해주는 객체이다.Bean 등록 방법1) @Component 방식내가 직접 만든 클래스를 Bean으로 등록할 때 사용한다.@Service, @Repository, @Controller 모두 내부적으로 @Component를 포함하고 있다. @Servicepublic class ProductService {} 스프링이 실행되면 Component Scan을 통해 @Component 계열의 클래스를 찾아 Bean으로 등록한다.2) @Configuration + @Bean 방식수정할 수 없는 외부 라이브러리 클래스 등을 Bean으로 등록할 때 사용한다. @Configurationpublic cl..
[내일배움캠프 사전캠프] 17회차 TIL(7/15 수)
·
심화_AI를 활용한 백엔드 아키텍처 심화 과정
내가 맡은 파트 도메인 비즈니스 로직 개선 및 예외 처리 구조 개선1. 기본 배송지 관리 로직 개선문제 상황배송지 도메인을 구현하면서 사용자는 하나의 기본 배송지만 유지해야 한다는 비즈니스 요구사항이 존재했다.처음에는 단순히 배송지의 isDefault 값만 변경하면 된다고 생각했지만, 다음과 같은 문제가 발생할 수 있었다.새로운 배송지를 기본 배송지로 지정했을 때 기존 기본 배송지가 유지되어 여러 개의 기본 배송지가 생성될 가능성기본 배송지로 설정된 배송지를 삭제했을 때 사용자의 기본 배송지가 존재하지 않는 문제따라서 기본 배송지 변경과 삭제 과정에서 데이터 정합성을 유지할 수 있는 로직이 필요했다.2. 기본 배송지 변경 로직 구현기본 배송지를 변경하는 경우 기존 기본 배송지를 먼저 확인하도록 구현했다...