본문 바로가기

기타66

[MSA] 분산 트랜잭션의 문제 해결 - 사가(Saga) 사가는 여러 단계의 로컬 트랜잭션으로 구성된 비즈니스 프로세스다. 각 로컬 트랜잭션은 특정 서비스내에서 원자적으로 수행된다.이 흐름의 각 단계는 서로 다른 서비스에서 수행할 수 있는 작업을 나타낸다. 각 서비스 내부의 모든 상태 변경은 로컬 ACID 트랜잭션 내에서 처리될 수 있다. 사가를 통해 기술적인 실패가 아닌 비즈니스 실패로부터 복구할 수 있다는 점을 기억하자. 예를 들어, 고객이 결제를 시도했지만 고객의 자금이 부족하다면, 사가가 처리해야 하는 비즈니스 실패다. 반면에 결제 게이트웨이가 타임아웃이 되거나 500 에러를 발생시키면, 별도로 처리해야 하는 기술적 실패다. 사가는 기반 구성 요소가 제대로 동작하고 있다고 가정한다. 이 모든 단계가 단일 데이터베이스 트랜잭션에서 수행된 경우라면, 간단한.. 2025. 5. 1.
3-Way Handshake & 4-Way Handshake 1. TCP 3-Way Handshake (연결 설정)목적: TCP 연결 설정이다. 통신 전 양측의 준비 상태 확인 및 정보(시퀀스 번호) 교환이 목적이다.과정:[SYN] 클라이언트 → 서버: 클라이언트는 서버에 SYN 패킷(Client_ISN 포함)을 전송한다. 클라이언트는 SYN_SENT 상태이다.[SYN+ACK] 서버 → 클라이언트: 서버는 SYN 수신 후, SYN 패킷(Server_ISN 포함)과 ACK(Client_ISN + 1)를 클라이언트에 전송한다. 서버는 SYN_RECEIVED 상태이다.[ACK] 클라이언트 → 서버: 클라이언트는 SYN+ACK 수신 후, ACK(Server_ISN + 1) 패킷을 서버에 전송한다. 클라이언트는 ESTABLISHED 상태가 된다. 서버도 ACK 수신 시 E.. 2025. 5. 1.
(Synchronous || Asynchronous) || (Blocking || Non-Blocking) BlockingNon-BlockingSynchronous호출 함수가 결과 반환까지 대기 (호출 스레드 Block)호출 함수가 결과 반환까지 대기하나, 작업 완료 여부는 지속 확인 필요Asynchronous호출 함수는 대기하지 않음. 실제 작업은 별도 스레드에서 Block됨호출 함수는 대기하지 않음. 작업 완료 시 이벤트/콜백으로 결과 처리 설명:Synchronous & Blocking: 함수를 호출하면, 해당 작업이 완료되어 결과를 반환할 때까지 호출한 스레드는 멈춰서 기다림.Synchronous & Non-Blocking: 함수를 호출하면 즉시 결과를 반환하지만, 실제 작업 완료 여부는 아님(예를 들어, 준비 안됨 표시를 한다던가). 호출한 스레드는 멈추지 않지만, 작업이 완료될 때까지 계속 상태를 확.. 2025. 5. 1.
지식이 값싼 시대 AI의 발전이 놀랍다. 무섭다. 처음 AI를 접한 건 대부분의 사람이 그렇겠지만 ChatGPT 3.5였다.불과 약 2년전, 2023년 1월이었다. 그 때의 충격은 이루말할 수 없지만, 지금의 AI는 2023년 1월의 그 것과는 또 다르게 비선형적으로 발전했다. 이제 AI를 사용하지 않으면 뒤쳐지는 시대가 됐다.일부 기업에서 보안상, 혹은 무언의 이유로 AI를 사용하지 않는다고 하지만 곧 모두 바뀔 것이라 생각한다(아니라고 생각한다면, 고개를 들어 미국 빅테크 시총을 보라).AI를 사용하지 않는 기업은, AI를 사용하는 기업에게 무조건 뒤쳐질 수 밖에 없다.생산성의 효율이 다르다. 오히려 AI를 사용하지 않거나, 거부하는 직원을 정중히 내보내는 편이 맞지 않을까?위 말에 거부감을 느끼는 사람이 분명 있을 .. 2025. 4. 30.
[MSA] 마이크로서비스 통신 방식 성능프로세스 내 호출의 성능은 프로세스 간 호출의 성능과 기본적으로 차이가 있다. 프로세스 내 호출을 할 때, 기본 컴파일러와 런타임은 호출의 영향을 줄이려고 마치 처음에 호출이 없었던 것처럼 전체 호스트 최적화를 수행할 수 있다. 하지만 프로세스 간 호출에서는 이러한 최적화가 불가능하며, 패킷을 전송해야한다. 메서드에 매개변수를 전달할 때 보통 전달할 데이터 구조체는 이동되지 않는다. 대신 메모리 위치에 대한 포인터를 전달할 가능성이 높다. 객체나 데이터 구조를 다른 메서드에 전달할 때 데이터를 복사하려고 더 많은 메모리를 할당할 필요는 없다. 반면에 네트워크를 통해 마이크로서비스 간 호출을 할 때 데이터는 실제로 네트워크를 통해 전솔될 수 있는 특정 형태로 직렬화돼야 한다. 그런 다음에 데이터는 전송.. 2025. 4. 22.