서론 마이크로서비스 아키텍처(MSA)는 독립적인 서비스로 분할하여 개발과 관리의 복잡성을 줄여주는 동시에 더 나은 확장성과 장애 격리를 가능하는 장점이 있습니다. 그러나 이러한 장점에도 불구하고, MSA는 분산 시스템에서 발생하는 복잡한 트랜잭션과 데이터 일관성 문제를 해결해야 합니다. 그래서, MSA 환경에서 분산 트랜잭션을 해결하기 위한 패턴을 알아보겠습니다. MSA 에서 분산트랜잭션 문제들을 해결하기 위해 사용되는 패턴들 마이크로서비스 아키텍처에서 사용되는 이러한 패턴들은 각각 다른 문제를 해결하기 위해 설계되었습니다. 각 패턴의 간단한 개념들을 소개하겠습니다. 1. Saga 패턴 여러 마이크로서비스에 걸쳐 있는 긴 비즈니스 프로세스를 일련의 로컬 트랜잭션으로 나눕니다. 각 단계는 독립적으로 실행되..
item 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라 마커 인터페이스 아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스를 마커 인터페이스 라고 한다. 대표적인 예가 Serializable이다 package java.io; public interface Serializable { } 자바에서 직렬화를 사용하고 싶은 클래스에 Serializable을 붙여주면된다. 직렬화 : 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술 Serializable 인터페이스를 구현한 클래스는 ObjectOutputStream.writeObject 메서드를 통해 직렬화..
item 31. 한정적 와일드카드를 사용해 API 유연성을 높이라 불공변인 제네릭 타입 서로 다른 Type1 Type2가 있을 때 List은 List의 하위 타입도 상위 타입도 아니다. List 에는 어떤 객체든 넣을 수 있지만 List에는 문자열만 넣을 수 있기 때문에 리스코프 치환 원칙에 어긋나 하위타입이 될 수 없다. 한정적 와일드카드 타입 - 생산자 와일드카드를 사용하지 않은 pushAll 메서드 public void pushAll(Iterable src) { for (E e : src) { push(E); } } Stack numberStack = new Stack(); Iterable iterable = ...; numberStack.pushAll(iterable); Integer는 Numbe..
item 24. 멤버 클래스는 되도록 static으로 만들어라 중첩클래스 다른 클래스 안에 정의된 클래스를 말한다. 자신을 감싼 바깥 클래스에서만 사용되어야 한다. 중첩 클래스를 사용함으로써 불필요한 노출을 줄여 캡슐화를 할 수 있고 유지보수하기 좋은 코드를 작성할 수 있다. 중첩 클래스 종류 정적 멤버 클래스 비정적 멤버 클래스 익명 클래스 지역 클래스 정적 멤버 클래스 정적 멤버 클래스와 비정적 멤버 클래스를 구분하는 기준은 static 키워드가 함께 작성되었는지 여부로 판단할 수 있다. class Outer { private int out = 100; static class Inner { private int in; void callOut() { Outer outer = new Outer(); Sy..