JSCODE Logo
JSCODE 박재성JSCODE 제이온JSCODE 시니
온라인 강의프로그래밍 과외책/전자책무료 강의
유튜브블로그
후기
완강 후기 이벤트블로그 리뷰 이벤트AWS SAA 합격 후기 이벤트
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2026 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침

비전공자도 이해할 수 있는 MSA 입문/실전

MSA 기본 개념

MSA를 왜 배워야할까?
MSA(Microservice Architecture)란?
MSA의 핵심 특징 / MSA의 독보적인 장점
언제 MSA를 도입하는 게 적절할까?
많은 사람들이 MSA가 어렵다고 착각하는 이유
MSA인지 아닌지를 판단하는 기준
MSA를 쉽고 빠르게 배우는 방법

기본적인 마이크로서비스 구축해보기

MSA 프로젝트 요구사항 및 설계
[실습] 각 Microservice에 해당하는 DB 서버 띄우기
[실습] User Microservice 만들기
[실습] Board Microservice 만들기
구현한 MSA 프로젝트를 잘 구현했는 지 전체적으로 검토하기

데이터 조회 API 구현하기 (마이크로서비스 간에 REST API로 통신)

데이터 조회 기능 구현 방식 (모놀리식 vs MSA)
[실습] 다른 마이크로서비스가 사용할 ‘사용자 조회 API’ 만들기
[실습] 특정 게시글 조회 API 만들기
특정 서비스가 장애났을 때, 장애가 전파되지 않게 막는 방법
[실습] 특정 서비스가 장애났을 때, 장애가 전파되지 않게 방어 코드 작성하기
[실습] 게시글 전체 조회 API 만들기 - 1
[실습] 게시글 전체 조회 API 만들기 - 2

데이터 쓰기 API 구현하기 (마이크로서비스 간에 REST API로 통신)

[실습] Point Microservice 만들기 - 1
[실습] Point Microservice 만들기 - 2
[실습] 회원 가입하면 포인트가 적립되도록 만들기
[실습] 사용자 활동 점수 적립 API 만들기
[실습] ‘포인트 차감 → 게시글 작성→ 활동 점수 적립’ 순으로 로직이 처리되도록 만들기

MSA 환경에서 트랜잭션 관리하기

게시글 작성 API 로직 수행 중, 중간에 에러가 발생하면 어떻게 될까?
MSA 환경에서의 트랜잭션 처리 방법
Saga 패턴이란? / 보상 트랜잭션이란?
[실습] 게시글 작성 API에 Saga 패턴 적용시키기 - 1
[실습] 게시글 작성 API에 Saga 패턴 적용시키기 - 2
Eventual Consistency(최종적 일관성)이란?
[참고] Saga 패턴을 구현할 때 고려해야 할 요소 (멱등성, 동시성 이슈 등)

데이터 쓰기 API 구현하기 (마이크로서비스 간에 메시징 기반으로 통신)

MSA 환경에서 언제 메시징 기반(비동기 방식)으로 통신하면 좋을까?
어떻게 구현할 지 설계하기
[실습] 게시글 서비스에서 Kafka로 ‘게시글 작성 완료 이벤트’ 발행하기
[실습] 사용자 서비스에서 Kafka로부터 ‘게시글 작성 완료 이벤트’ 구독하기
[실습] 잘 작동하는 지 테스트하기

‘메시징 기반의 데이터 동기화 방식’으로 데이터 조회 최적화하기

‘데이터 동기화’를 활용한 게시글 조회 API 최적화하기
[실습] 사용자 서비스에서 Kafka로 ‘회원가입 완료 이벤트’ 발행하기
[실습] 게시글 서비스에서 Kafka로부터 ‘회원가입 완료 이벤트’ 구독하기
[실습] 잘 작동하는 지 테스트하기
[실습] 게시글 조회 로직 최적화하기 (

API Gateway를 활용해 클라이언트의 요청을 적절한 서버로 전달하기

API Gateway란?
[실습] Spring Cloud Gateway 셋팅하기 / 라우팅 설정하기
[실습] ‘외부용 API’와 ‘마이크로서비스간 통신용 API’ 구분하기
[실습] API Gateway를 활용해 클라이언트가 접근할 API 제한하기

API Gateway를 활용해 JWT 인증 로직 구현하기

MSA에서 ‘인증 로직’ 구현하는 방법
[실습] 사용자 서비스에 로그인 API 구현하기
[실습] API Gateway에 JWT 인증 로직 구현하기 (
[실습] 게시글 작성 로직 수정하기

마무리

MSA는 꼭 쿠버네티스로 배포해야 할까?
[미션] AWS에 MSA 프로젝트 배포하기
[참고] 완성 프로젝트 Github 주소
← 블로그 목록으로 돌아가기

Eventual Consistency(최종적 일관성)이란?

JSCODE 박재성
JSCODE 박재성
2026. 03. 18.
author
JSCODE 박재성
category
MSA
createdAt
Dec 6, 2025 02:16 PM
isPublic
isPublic
series
비전공자도 이해할 수 있는 MSA 입문/실전
slug
what-is-eventual-consistency
type
post
updatedAt
Mar 18, 2026 09:00

✅ Eventual Consistency(최종적 일관성)이란?

MSA 환경에서 Saga 패턴을 기반으로 로직을 처리하다보면 어쩔 수 없이 데이터 일관성이 잠깐동안 깨지는 순간이 발생한다. 이 현상을 눈으로 확인하기 위해 코드를 일부 수정해보자.
 
  1. 활동 점수 증가 API 로직 수정하기
    1. 게시글 작성 API는 ‘포인트 차감 → 게시글 작성 → 활동 점수 적립’의 순서로 로직을 처리한다. 이 때, ‘활동 점수 적립’ 작업을 처리하려고 하는 데, 트래픽이 몰려서 처리하는 데 시간이 오래걸리는 상황이라고 가정하자.
      service/UserService
      @Transactional public void addActivityScore( AddActivityScoreRequestDto addActivityScoreRequestDto ) { User user = userRepository.findById(addActivityScoreRequestDto.getUserId()) .orElseThrow(() -> new IllegalArgumentException("사용자를 찾을 수 없습니다.")); user.addActivityScore(addActivityScoreRequestDto.getScore()); userRepository.save(user); // 10초 대기 try { Thread.sleep(10000); } catch (Exception e) {} // throw new RuntimeException("에러 발생"); }
       
  1. user-service 다시 실행시키기
    1.  
  1. 테스트를 위해 DB 데이터 정리하기
    1. 게시글 데이터 전부 삭제하기
      1. notion image
         
    2. 포인트 데이터 1000점으로 맞추기
      1. notion image
         
    3. 사용자 활동 점수 0점으로 바꾸기
      1. notion image
       
       
  1. API 요청 보내자마자 DB 다시 확인하기
    1. notion image
       
      [API 요청 보낸 직후에 조회한 DB 데이터]
      notion image
      notion image
      notion image
      API 요청을 보낸 직후에 DB 데이터를 조회해보면 데이터 일관성이 맞지 않는 순간이 발생한다. 즉, 데이터만 봤을 때 서비스 기획상 모순되는 상황(게시글은 작성됐는 데 활동 점수만 적립되지 않은 상황)이 발생했다.
      포인트 차감 O, 게시글 데이터 O, 활동 점수 적립 X
       
      [API 요청 보내고 10초 이후에 조회한 DB 데이터]
      notion image
      notion image
      notion image
      하지만 일정 시간(10초)이 지난 이후에 DB 데이터를 다시 조회해보니 데이터 일관성이 맞아졌다.
      포인트 차감 O, 게시글 데이터 O, 활동 점수 적립 O
       
      이런 것처럼 처음에는 잠깐 불일치하는 데이터가 발생하지만, 일정 시간 이후에는 모든 데이터의 일관성이 맞아지는 현상을 보고 Eventual Consistency(최종적 일관성)이라고 한다.
       
       

✅ Eventual Consistency에서 데이터 일관성이 잠깐 깨져도 괜찮은 이유

Eventual Consistency(최종적 일관성)는 처음에는 데이터 일관성이 맞지 않는 순간이 잠깐 생겼다가, 일정 시간 이후에는 모든 데이터 일관성이 맞아지는 현상을 의미한다. 이 개념을 처음 들으면 이런 생각이 들 수도 있다.
 
“잠깐이라도 데이터가 불일치한 상태가 존재해도 되는거야? 그 사이에 누가 불일치한 상태의 데이터에 접근하면 문제되는 거 아냐?”
 
그런데 실무에서 이런 Eventual Consistency를 허용해도 서비스상 크게 문제가 되지 않는 경우가 많다. 실제 규모 있는 기업의 사례를 살펴보자.
  • Instagram에서 게시글을 작성하면, 다른 사용자에게 바로 보이는 게 아니라 일정 시간 이후에 보인다.
    • 작성한 게시글이 바로 즉시 안 보인다고 해서 큰 문제 될 게 없다.
  • Instagram에서 누군가가 게시글에 ‘좋아요’를 눌렀는데, 친구에게는 그게 즉시 반영되지 않고 일정 시간 이후에 반영된다.
    • 좋아요 누른 게 바로 즉시 안 보인다고 해서 큰 문제 될 게 없다.
  • Amazon에서 누군가가 재고가 1개 남은 상품을 구매했는데, 일정 시간 동안 “재고 있음”으로 보일 수 있다.
    • 재고가 있는 줄 알고 결제를 시도하지만, 서버가 결제 전에 재고를 체크했는데 재고가 없다고 판단했다고 치자. 그럼 사용자에게 “죄송합니다. 품절된 상품입니다”의 메시지와 함께 결제를 거절하면 된다. (사용자 입장에서 살짝 불편할 수는 있으나 큰 문제가 되진 않는다.)
 
실제 서비스에서도 Eventual Consistency의 방식으로 구현이 되어 있는데도 불구하고 데이터의 일관성이 깨진 순간을 체감하지 못하는 이유는, 데이터 일관성이 깨지는 순간이 너무 찰나의 순간이기 때문이다. 서버 자체에 장애가 발생한 게 아니라면 데이터 일관성이 깨지는 순간이 1초를 넘지 않는 경우가 대부분이다.
 
 

✅ 잠깐이라도 데이터 일관성이 깨지면 안 될 때는 어떻게 하나요?

Saga 패턴을 적용하면서 Eventual Consistency로 인해 데이터의 일관성이 깨지는 찰나의 순간 조차도 막는 방법이 존재한다. 하지만 이걸 실제로 코드로 구현하려면 생각보다 많이 복잡해지기 때문에 MSA 입문 강의에서는 생략할 예정이다. 너무 궁금한 분들은 아래 링크를 참고하도록 하자.
스프링캠프 2025 [Track 1] 4. 실전! MSA 트랜잭션 개발 가이드 (김용욱)
🎙️ 김용욱 (삼성 SDS) 🗓️ 스프링캠프 2025 Track 1 - 4 (2025년 06월 28일) 🧭 스페이스쉐어 삼성 📂 발표자료 : https://github.com/springcamp/presentations/tree/main/SpringCamp-2025-Presentations [🔗 스프링캠프 & KSUG] 스프링캠프 2025 웹 https://springcamp.ksug.org/2025/ 스프링캠프 페이스북 https://www.facebook.com/springcampkr/ 스프링캠프 유튜브 https://www.youtube.com/@springcampkr KSUG 웹 https://www.ksug.org/ KSUG 구글 그룹 https://groups.google.com/g/ksug KSUG 페이스북 https://www.facebook.com/groups/springkorea KSUG 유튜브 https://www.youtube.com/@workerksug7409 #KSUG #스프링캠프 #SpringCamp #분산트랜잭션 #DistributedTransaction #SagaPattern
스프링캠프 2025 [Track 1] 4. 실전! MSA 트랜잭션 개발 가이드 (김용욱)
https://youtu.be/0UiE9YJi_f4
스프링캠프 2025 [Track 1] 4. 실전! MSA 트랜잭션 개발 가이드 (김용욱)
 
📎
이 글은 비전공자도 이해할 수 있는 MSA 입문/실전 (feat. Spring Boot) 강의의 수업 자료 중 일부입니다.