분류 전체보기 324

[기술면접 대비] Database 2 - Transaction, 격리레벨, 동시성

Transaction 개념과 ACID 원칙 👉 Transaction 이란? DB에서 Query문에 의해 발생하는 일정 작업의 최소 단위 👉 Transaction 4원칙 트랜잭션의 4원칙으로 원자성, 일관성, 독립성, 영구성을 의미 원자성 : 트랜잭션 연산의 단위는 다 반영되거나, 다 안되거나 일관성 : 트랜잭션을 반복적으로 실행하더라도 그 결과 일정한 것 독립성(isolation) : 여러개의 트랜잭션간 분리되어서 실행 되는 것 영구성 : 한번 트랜잭션이 완료되면, 그 결과가 유지되는 것 👉 Transaction의 ACID 원칙 깨진 사례 ACID 깨진 경험이 있었냐, 1개의 함수에서 2개의 Table을 각각 수정하는 경우, 1번째 경우만 성공하고 2번째에서 오류 나는 경우에서 Transaction Tr..

[MSA 경험기] 모아 구독 (7) 메일 서비스 비동기 전환 (by. FastAPI, Celery, Rabbitmq)

지난 글 이전 글에서는 검색 히스토리 서비스를 구현하며, DB 선택 과정과 Singleton 패턴을 적용한 경험에 대해 작성하였다. https://yubi5050.tistory.com/225 [MSA 경험기] 모아 구독 (6) 검색 히스토리 서비스 (by. NoSQL, Singleton) 지난 글 이전 글 에서는 Query Profiling을 통한 Query 시간 최적화에 대해 작성하였었다. https://yubi5050.tistory.com/223 [MSA 경험기] 모아 구독 (5) Query Profiling을 통한 최적화 지난 글 이전 글 에서는 조회수 yubi5050.tistory.com 이번 글 에서는 기존에 동기로 이루어지던 메일 서비스를 비동기로 전환하면서 고민하였던 부분들과 과정에 대해 작..

[Celery] Celery 비동기 작업 큐 예제 (by. FastAPI)

Celery 란? Celery 란 비동기 방식의 작업 큐로, Broker에게 받은 메시지 작업(Task)을 수행하는 Worker 이다. 👉 Celery를 사용하는 이유? 동기적으로 처리할 경우 오래 걸리는 메일 전송 / 대용량 파일 업로드 등의 Task를 비동기 처리하기 위함 Worker들을 병렬적으로 실행 하여 동시에 처리도 가능 일반적으로 비동기 이벤트 기반 처리의 구조는 Producer (Server Framework) => Broker (RabbitMQ, Redis 등) => Consumer (Celery) 로 이루어지는데, Celery는 Consumer 역할을 수행한다. 👉 Broker Broker로는 일반적으로 RabbitMQ(Message Queue)를 많이 사용하고, Redis와 같은 Pu..

DB/기본 실습 2022.11.29

[MSA 경험기] 모아 구독 (6) 검색 히스토리 서비스 (by. NoSQL, Singleton)

지난 글 이전 글 에서는 Query Profiling을 통한 Query 시간 최적화에 대해 작성하였었다. https://yubi5050.tistory.com/223 [MSA 경험기] 모아 구독 (5) Query Profiling을 통한 최적화 지난 글 이전 글 에서는 조회수 구현시 동일 유저의 반복 접근 이슈를 쿠키를 활용하여 해결 방법에 대해 작성하였다. https://yubi5050.tistory.com/222 [MSA 경험기] 모아 구독 (4) 조회수 구현 2 (by. 쿠키 yubi5050.tistory.com 이번 글 에서는 '검색 히스토리 서비스 - 최근 검색어, 추천 검색어'를 구현하면서 고민하였던 부분들에 대해 작성해 보려고 한다. BE에서는 검색 결과에 대한 구독 상품 조회 API와 검색 ..

[MQ] 메시지 지향 미들웨어 (by. RabbitMQ, Redis)

메시지 지향 미들웨어(Message Oriented Middleware, MOM) 란? 메시지 지향 미들웨어(Message Oriented Middleware, MOM)이란, 응용 프로세스 간 비동기 방식의 데이터 통신을 통해, 메시지를 전달 해주는 시스템을 뜻하며, 주로 대용량 배치 처리, 이메일 전송, 채팅 서비스 등에 주로 많이 사용됨 👉 메시지를 전달하는 방식의 모델 2가지 Message Queue 기반 모델 발행(Publish)-구독(Subscribe) 기반 모델 📌 메시지 지향 미들웨어 시스템 사용시 장점 비동기성 작업 처리 프로세스간 결합도(의존성)가 낮음 메시지 생산자(Producer)나, 메시지 소비자 (Consumer)에 대한 확장성이 좋음 메시지 생산자의 서버가 다운되도, Messag..

DB/이론 2022.11.26

[MSA 경험기] 모아 구독 (5) Query Profiling을 통한 최적화

지난 글 이전 글 에서는 조회수 구현시 동일 유저의 반복 접근 이슈를 쿠키를 활용하여 해결 방법에 대해 작성하였다. https://yubi5050.tistory.com/222 [MSA 경험기] 모아 구독 (4) 조회수 구현 2 (by. 쿠키와 동시성) 지난 글 이전 글 에서 사실 조회수 구현에 대해 쿠키와 동시성을 같이 설명하려고 했으나, 동시성을 설명하는 과정이 길어져, 두 편에 나눠서 쓰게 되었다. (사실 조회수 기능을 구현했던 시간 yubi5050.tistory.com 이번 글에서는 프로젝트를 진행하면서 Query Profiling을 통해 수행 시간을 줄인 경험에 대해 작성해보려고 한다. Query Profiling 도구 - Django debug toolbar Profiling Tool로는 일전에..

[MSA 경험기] 모아 구독 (4) 조회수 구현 2 (by. 쿠키와 동시성)

지난 글 이전 글 에서 사실 조회수 구현에 대해 쿠키와 동시성을 같이 설명하려고 했으나, 동시성을 설명하는 과정이 길어져, 두 편에 나눠서 쓰게 되었다. (사실 조회수 기능을 구현했던 시간 보다 글로 정리하는 시간이 더 길어진 것 같은..) 여튼 이전 글에서는 조회수를 구현하기 위한 동시성 이슈를 해결하기 위해, F객체의 사용으로 Python 메모리에 로딩 없이 DB직접 반영하는 것과, Transaction 격리 수준 까지 알아보았다. https://yubi5050.tistory.com/221 [MSA 경험기] 모아 구독 (3) 조회수 구현 1 (by. 쿠키와 동시성) 지난 글 이전 글 에서는 페이지 네이션, 캐싱을 적용한 상품 리스트 조회를 구현하면서 고민했던 부분에 대해 적어보았었다. https://..

[MSA 경험기] 모아 구독 (3) 조회수 구현 1 (by. 쿠키와 동시성)

지난 글 이전 글 에서는 페이지 네이션, 캐싱을 적용한 상품 리스트 조회를 구현하면서 고민했던 부분에 대해 적어보았었다. https://yubi5050.tistory.com/220 [MSA 경험기] 모아 구독 (2) 페이지 네이션, 캐싱을 적용한 상품 조회 지난 글 이전 글 에서는 MSA 프로젝트를 시작한 계기와 프로젝트 기획 및 설계에 대해 작성했었다. https://yubi5050.tistory.com/218 [MSA 경험기] 모아 구독 (1) 프로젝트 기획 및 설계 MSA 프로젝트 시작 계 yubi5050.tistory.com 이번 글 에서는 '조회 서비스 - 구독 상품 상세 조회'의 조회수를 구현하면서 이슈가 되었던 부분과 해결 방법에 대해 이야기 해보려고 한다. (해당 글에서는 첫번째 이슈에 대..

[MSA 경험기] 모아 구독 (2) 페이지 네이션, 캐싱을 적용한 상품 조회

지난 글 이전 글 에서는 MSA 프로젝트를 시작한 계기와 프로젝트 기획 및 설계에 대해 작성했었다. https://yubi5050.tistory.com/218 [MSA 경험기] 모아 구독 (1) 프로젝트 기획 및 설계 MSA 프로젝트 시작 계기 최근 몇달 전 부터 MSA라는 단어와 우연히? 마주치는 빈도가 많아졌었다. MSA에 대해서는 일전에 모놀리식과의 장단점을 비교해보았던 적이 있었고, MSA 가 가진 장점에 많 yubi5050.tistory.com 이번 글 에서는 '조회 서비스 - 구독 상품 조회'를 구현하면서 고민하였던 부분, 관련하여 사용한 기술들을 중심으로 이야기 해보려고 한다. 주제는 크게 아래 두가지 이다. 다수의 구독 상품 목록 조회시 Pagination 적용 고정적으로 Reponse되는..

[Cache] Memcached vs Redis 차이

Memcached 와 Redis 란? Memcahced와 Redis는 Key-value 형태의 인-메모리 기반의 캐싱 시스템으로, 캐시 레이어로서 DB의 부하를 줄여주며, 주로 웹 어플리케이션의 응답 속도 개선을 위해 사용된다. 두가지 모두 사용하기 어렵지 않지만, Memcached는 Cache 서비스를 위해 설계된 반면, Redis는 좀더 다양한 용도에 효과적으로 사용 할 수 있도록 설계되었다는 차이가 있다. Memcached 특징 웹 서버에서 기존에 할당된 캐시 메모리를 초과시, 전체 할당된 메모리에서 유동적으로 사용 가능 Data Evicion 전략 : LRU (Least Recently Used) 알고리즘만 사용 Data Structure : String 형태만 지원 Persistance : Me..

DB/이론 2022.11.22