전체 글 315

[기술면접 대비] Database 3 - Index, Replication

Index & Cluster Index, Non-Clustered Index 👉 Index란? Index 는 DB Table에 대한 검색 성능의 속도를 높여주는 자료 구조 👉 Index 특징 필드에 Index 설정시 Index Table이 별도의 메모리 공간에 물리 주소와 함께 생성됨 (추가 메모리 사용 발생) Index Table에 쿼리 요청시 해당 주소로 바로 연결하여 결과 값을 조회 index는 테이블은 특정 key로 찾으며, 해당 key 값은 B-Tree 형태로 평소 저장되어 빠르게 탐색 가능 👉 Clustered Index, Non-Clustered index 란? Clustered Index : 특정 컬럼을 index로 설정하여 index table에 정렬된 상태로 유지하는 것 (ex. id를..

[기술면접 대비] 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되는..