🖥️ CS 313

복합 인덱스의 순서는 중요하다

목차작성 계기인덱스란?인덱스 컬럼 기준복합 인덱스의 순서는 중요하다예시 사례 - 4개의 복합 인덱스1번 인덱스만 타는 경우1번, 2번 인덱스를 타는 경우2번, 1번 인덱스를 타는 경우 (역방향)1번, 4번 인덱스를 타는 경우2번 ~ 4번 인덱스를 타는 경우결론참고 자료0. 작성 계기현업에서는 쿼리 작성 후 해당 쿼리가 적절한지에 대한 판단을 DBA분께 문의를 드립니다.만약 성능이 좋지 못한 쿼리라면 개선책을 제시해주시며, 개발자는 이를 따라 쿼리를 수정하게 됩니다.개발자가 DB에 대한 깊은 이해를 하지 못한 상황에서도 적절성에 대한 유효성을 체크해주시니 좋은 일이지만,이에 의존하여 가끔은 내가 짠 쿼리가 제대로 인덱스를 타는지 아닌지를 모르는 경우가 발생합니다.특히 업무가 바쁘거나, 생각보다 단순한 쿼리..

🖥️ CS/DB 2025.01.06

DB 데이터 동시성 이슈 해결법

목차작성 계기동시성 이슈의 원인해결책 (1) - 물리적 DB 1개 사용해결책 (2) - DB간의 동기화 (MQ)해결책 (3) - Kafka + 물리적 DB 1개 사용1. 작성 계기Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)의 강의를 듣고 인상 깊은 내용을 정리 중이다.현업에서는 Master DB 1대 Slave DB 1대로 레플리카구조로 이루어진 프로젝트가 대부분이다.만약 동일 서비스에 Master DB가 여러대일때의 상황을 고려해본 적이 별로 없다.(레플리카에 대한 설명은 클러스터링, 레플리카, 그리고 샤딩 게시글에서 확인해보자.)강의를 통해 학습했으니 내용을 정리해보자.2. 동시성 이슈의 원인해당 프로젝트에서는 USER SERVICE 에서 ORDER SERVICE API를 ..

🖥️ CS/DB 2024.11.13

[마이크로서비스 아키텍처 구축] 6. 분산 트랜잭션

해당 글은 마이크로서비스 아키텍처 구축에서 학습한 내용을 다룹니다.목차DB 트랜잭션분산 트랜잭션 - 2PC문제점 1 - 격리성 위배문제점 2 - 원자성을 지키기 어려움분산 트랜잭션, 그냥 안된다고 하라사가 (SAGA) 패턴사가 실패 모드사가 롤백롤백을 줄이기 위해 워크플로 단계를 재정렬사가 패턴 구현오케스트레이션형 사가코레오그래피형 사가혼합 (+ 분산 트레이싱)무엇을 사용해야 할까?사가 vs 분산 트랜잭션부록 - DB 분산 트랜잭션1. DB 트랜잭션기존 Monolithic에서 한 번에 동시에 2개의 데이터를 변경했을 경우,1개의 DB로 그림 6-1에서 단일 트랜잭션을 유도할 수 있다.그러나 MSA 분산환경에서는 그림 6-2 처럼 서로 다른 DB에 데이터가 적재되고, 이는 동일 트랜잭션 내에서 트랜잭션의 ..

[마이크로서비스 아키텍처 구축] 5. MSA 마이크로서비스 통신 구현 (2)

해당 글은 마이크로서비스 아키텍처 구축에서 학습한 내용을 다룹니다.목차MSA에서 DRY와 코드 재사용의 위험서비스 디스커버리DNS동적 서비스 레지스트리1. MSA에서 DRY와 코드 재사용의 위험개발자라면 DRY(Don't Repeat Yourself), 즉, 반복하지 말라는 약어를 종종 듣게된다.동일한 작업을 수행하는 코드 라인이 많으면 코드 베이스가 필요 이상으로 커져 파악하기 어려워지며,동작을 변경하려고 할 때 해당 동작이 시스템의 많은 곳에 복제되어있다면 변경할때 누락되기 쉽다.때문에 DRY는 재사용할 수 있는 코드를 만들도록 유도한다.중복된 코드를 모아 추상화한 다음, 여러 곳에서 호출할 수 있으며, 아마도 어디에서나 사용할 수 있는 공유 라이브러리를 만드는 단계까지 갈 수도 있다.라이브러리를 통..

[마이크로서비스 아키텍처 구축] 5. MSA 마이크로서비스 통신 구현 (1)

해당 글은 마이크로서비스 아키텍처 구축에서 학습한 내용을 다룹니다.목차MSA 서비스간 통신 종류원격 프로시저 호출 RESTGraphQL메시지 브로커중단 변경 관리하기락스텝 배포 (lockstep deployment)호환도지지 않는 마이크로서비스 버전의 공존기존 인터페이스 에뮬레이션무엇이 최선일까?극단적 조치1-1. MSA 서비스간 통신 종류 - 원격 프로시저 호출 (Remote Procedure Call)로컬 호출을 통해 어딘가에 있는 원격 서비스를 실행(RPC)하는 기술을 말한다.일반적으로 RPC 기술은 직렬화 프로토콜에 투자한다는 의미이며, RPC 프레임워크는 데이터가 직렬화 되거나 역직렬화 되는 방법을 정의한다.대표적으로 gRPC가 있으므로 이를 중점으로 설명한다.gRPC는 프로토콜 버퍼 (아래 코..

[마이크로서비스 아키텍처 구축] 4. MSA 마이크로서비스 통신 방식

해당 글은 마이크로서비스 아키텍처 구축에서 학습한 내용을 다룹니다.목차프로세스 내부에서 프로세스 사이로(1) 프로그램, 프로세스, 스레드의 관계(2) 왜 프로세스 간 호출의 오버헤드가 더 클까?(3) 인터페이스 변경(4) 에러 처리MSA 통신 방식 동기 대 비동기이벤트 기반 통신1. 프로세스 내부에서 프로세스 사이로(1) 프로그램, 프로세스, 스레드의 관계1. 프로그램이 구동되면 메모리에 올라간다.2. 메모리에 올라간 프로그램의 상태를 프로세스라고 한다.3. 이때 프로세스 내에서 실행되는 여러 흐름의 단위가 '스레드'이다.Monolithic에선 프로세스 내부에서 호출이 이루어졌다면 MSA에선 프로세스 사이로 네트워크릍 통해 통신이 이루어짐프로세스 내부 호출이 일어날 때, 런타임은 호출의 영향을 줄이려고..

[마이크로서비스 아키텍처 구축] 3. 모놀리스 분해

해당 글은 마이크로서비스 아키텍처 구축에서 학습한 내용을 다룹니다. 목차모놀리스가 적이 경우는 드물다무엇을 MSA로 먼저 전황해야할까?MSA 전환 방식 - 교살자 무화과 패턴(Strangler Fig Pattern)MSA의 DB 이슈1. 모놀리스가 적인 경우는 드물다MSA에서 성취하고자 하는 것을 명확하게 이해하지 못하면 MSA를 만드는데만 집착하게 될 수 있고, 이는 MSA 도입 후 새로운 복잡성을 도래한다다시 말하지만 Monolithic != 레거시 라는 것을 기억하자시스템을 조기에 MSA로 분해하면 많은 비용이 발생한다 (특히 해당 프로젝트의 도메인 지식이 없는 사람은 더더욱)때문에 MSA로 분해하려는 기존 코드베이스를 보유하는 것이 처음부터 MSA를 진행하는 것 보다 훨씬 빠르고 쉽다나의 사..

View 테이블

목차뷰(View) 테이블이란?장점단점Slave DB와의 차이점현업에서 사용 사례1. 뷰(View) 테이블이란?실제 데이터를 저장하지 않고 DB에서 미리 정의한 쿼리의 결과를 저장해 놓은 가상 테이블일종의 재사용 가능한 쿼리데이터를 별도로 저장하지 않으면서, 조회 시 원본 테이블의 데이터를 기반으로 결과를 보여줌결국 실제 데이터는 원본 테이블에 저장되어 있고, 뷰는 그 데이터를 가공해서 보여줌 예) view 테이블 생성 예시 코드CREATE VIEW sales_department_view ASSELECT employee_id, name, departmentFROM employeesWHERE department = 'Sales';2. 장점재사용성 : 복잡한 쿼리를 쉽게 재사용 가능보안성 : 특정 열, 또는 ..

🖥️ CS/DB 2024.10.16

[마이크로서비스 아키텍처 구축] 2. 마이크로서비스 모델링 방법

해당 글은 마이크로서비스 아키텍처 구축에서 학습한 내용을 다룹니다.목차올바른 마이크로서비스의 경계결합 유형DDD핵심 요약 1. 올바른 마이크로서비스의 경계MSA에서 서비스는 응집력이 강하고 결합도가 낮으면 구조가 안정적응집력 : 경계선 내부의 사물끼리의 관계결합도 : 경계선 안의 사물과 경계선 밖의 사물과의 관계2. 결합 유형(1) 통과 결합데이터가 다른 하위 마이크로서비스에 필요하다는 이유만으로 한 마이크로서비스가 다른 마이크로서비스에 데이터를 전달하는 상황주문 서비스 --> 배송 목록 데이터 전달 --> 창고 서비스 --> 배송 목록 데이터 전달 --> 배송 서비스만약 최하위 배송 서비스에서 데이터 변경이 일어나면, 윗단계를 계속 거슬러 올라가 데이터 변경을 요구하는 상황이 발생할 수 있음따라서 위와..

[마이크로서비스 아키텍처 구축] 1. 기초 (MSA 개념)

해당 글은 마이크로서비스 아키텍처 구축에서 학습한 내용을 다룹니다. 0. 개요마이크로서비스란?마이크로서비스 핵심 개념모놀리스모놀리스의 장점마이크로서비스에 도움이 되는 활성화 기술마이크로서비스의 장점마이크로서비스의 고충마이크로서비스를 사용해야 하는가?  1. 마이크로서비스란? 마이크로서비스(microservice)는 비즈니스 도메인에 따라 모델링된 독립적으로 릴리스 가능한 서비스로, 기능을  캡슐화하고 네트워크를 통해 다른 서비스들에 엑세스하게 해준다.(편의를 위해 마이크로 서비스는 마이크로서비스 아키텍쳐(microservice architecture), 이하 MSA로 소개한다.)  외부에서 보면, 하나의 MSA는 블랙박스로 취급된다.가장 적절한 프로토콜을 사용해 1개 이상의 네트워크 엔드 포인트(Mess..