MSA 환경에서의 분산트랜잭션 관리하기위한 패턴들
서론 마이크로서비스 아키텍처(MSA)는 독립적인 서비스로 분할하여 개발과 관리의 복잡성을 줄여주는 동시에 더 나은 확장성과 장애 격리를 가능하는 장점이 있습니다. 그러나 이러한 장점에도 불구하고, MSA는 분산 시스템에서 발생하는 복잡한 트랜잭션과 데이터 일관성 문제를 해결해야 합니다. 그래서, MSA 환경에서 분산 트랜잭션을 해결하기 위한 패...
서론 마이크로서비스 아키텍처(MSA)는 독립적인 서비스로 분할하여 개발과 관리의 복잡성을 줄여주는 동시에 더 나은 확장성과 장애 격리를 가능하는 장점이 있습니다. 그러나 이러한 장점에도 불구하고, MSA는 분산 시스템에서 발생하는 복잡한 트랜잭션과 데이터 일관성 문제를 해결해야 합니다. 그래서, MSA 환경에서 분산 트랜잭션을 해결하기 위한 패...
마커 인터페이스 아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스를 마커 인터페이스 라고 한다. 대표적인 예가 Serializable이다 package java.io; public interface Serializable { } 자바에서 직렬화를 사용하고 싶은 클래스에 Serializabl...
불공변인 제네릭 타입 서로 다른 Type1 Type2가 있을 때 List<Type1>은 List<Type2>의 하위 타입도 상위 타입도 아니다. List<Object> 에는 어떤 객체든 넣을 수 있지만 List<String>에는 문자열만 넣을 수 있기 때문에 리스코프 치환 원칙에 어긋나 하위타입이 될 수 ...
중첩클래스 다른 클래스 안에 정의된 클래스를 말한다. 자신을 감싼 바깥 클래스에서만 사용되어야 한다. 중첩 클래스를 사용함으로써 불필요한 노출을 줄여 캡슐화를 할 수 있고 유지보수하기 좋은 코드를 작성할 수 있다. 중첩 클래스 종류 정적 멤버 클래스 비정적 멤버 클래스 익명 클래스 지역 클래스 정적 멤버 클래스 정적 멤...
개발을 하다보면 인스턴스 필드들만 모아놓는 목적만 가진 아래와 같은 클래스를 구성하는 경우가 있다. class Point { public double x; public double y; } 이러한 클래스 형태로 구현하였을 때는 클라이언트에서 필드에 직접 접근할 수 있으므로 캡슐화의 이점을 제공하지 못한다. 그리고 또 다른 단점들은 ...
Object의 기본 toString은 클래스이름@16진수 해시코드를 반환하여 그다지 쓸모 없는 메시지를 출력하게 된다. toString을 재정의 하면 훨씬 보기 편하게 만들 수 있다. 그리고 toString을 직접 호출하지 않아도 다른 어딘가에서 많이 호출하기 때문에 정의해두면 좋다. 실전에서 toString은 그 객체가 가진 주요 정보를 모두 반...
equals를 재정의한 클래스는 hashCode도 재정의 해야 한다. 그렇지 않으면 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제가 발생한다. hashCode 일반 규약 equals 비교에 사용되는 정보가 변경되지 않았다면, hashCode도 변하면 안된다. equals가 두 객체가 같다고 판단했다면, ...
equals는 재정의하기 쉬워보이지만 곳곳에 함정이 있다. 문제를 회피하는 가장 쉬운 길은 아예 재정의하지 않는 것이다. 그러니 다음에 해당된다면 재정의하지 않는것이 좋다. equals를 재정의 하면 안되는 경우 각 인스턴스가 본질적으로 고유할 때 값 클래스(Integer, String)가 아닌 동작하는 개체를 표현하는 클래스 ex) Thread...
자바는 가비지 컬렉터를 갖춘 언어로 다 쓴 객체를 알아서 회수해준다. 그렇다고 메모리 관리에 더 이상 신경을 쓰지않아도 되는건 아니다. 그 이유는 스택을 간단히 구현한 코드로 살펴보자 public class Stack { private Object[] elements; private int size = 0; private static f...
try-finally 자바 라이브러리에는 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많다. 예) InputStream, OutputStream, java.sql.Connection 전통적으로 자원이 제대로 닫힘을 보장하는 수단으로 try-finally가 쓰였다. public static String firstLineOfFile(Str...