본문 바로가기

Java22

The dark side of distributed systems 분산 시스템은, 존재조차 모르는 서버 오류로 인해 내 서버를 사용할 수 없는 위험성이 있다. 실패(failures)는 피할 수 없다. 원문에서는 failures 라고 되어 있는데 에러로 인한 장애를 피할 수 없다는 말로 이해했다. 분산 시스템이 클수록 이런 역동성(dynamism) 이 커지고 장애가 날 가능성이 높아진다. 쿠버네티스 월드에서 분산 컴퓨팅에 대한 잘못된 생각(많은 사람들이 옳다고 믿는) 8가지가 있다. 1. The network is reliable 2. Latency is zero 3. Bandwidth is infinite 4. The network is secure 5. Topology doesn’t change 6. There is one administrator 7. Transpo.. 2021. 11. 4.
리스트 객체를 특정 key 기준으로 grouping 그리고 merge 아래와 같이 Product 리스트가 있다고 해보자. Product 객체에는 id(고유 식별자), productId, itemNo(리스트) 필드가 있다. 여기서 id와 productId의 차이에 대한 설명은 비지니스 정책 이슈라 생략하려 한다. 중요한건 productId는 중복이 가능하다. 그래서 prodocutId를 기준으로 grouping 을 하고 itemNo 리스트값을 중복없이 merge 하려고 한다. List products = Arrays.asList( new Product("1", "a", Arrays.asList("11", "12", "13")), new Product("2", "a", Arrays.asList("12", "13", "14")), new Product("3", "b", Arra.. 2021. 9. 20.
ip 범위 구하고 범위안에 포함되는지(with subnetmask) 내부 로직을 다 이해해도 조금만 시간 지나면 까먹어서 정리했다. 코드는 IPv4 만 구현되어 있다. 서브넷 마스크, 넷마스크 용어를 엄격하게 구분져서 쓰지 않았다. 엄격히 구분할 필요가 없다고 판단했다. 먼저 ip 가 서로 같은지 다른지 비교를 해보자. 192.168.254.252와 192.168.254.253 은 당연히 다르다. string equal 을 이용해 바로 확인이 가능하다. 그런데 192.168.254.252/13 와 같이 subnetmask 가 같이 있는 경우, 192.175.254.253 이 포함되는지 여부는 바로 알기 어렵다(답은 포함됨). 코드를 보면서 하나씩 살펴보자. 먼저 IpAddressMatcher 생성자로 ip 와 subnetmask 문자열을 / 구분자로 함께 전달한다. Ip.. 2021. 8. 24.
재귀 호출 최적화(Tail-Call) 일반적인 재귀 호출 방식은 입력 데이터가 매우 많은 경우에 StackOverflowError 가 발생할 위험이 있다. TCO(Tail-Call Optimization) 기술을 사용하면 이 문제를 해결할 수 있다. 먼저 일반적인 재귀를 사용해서 팩토리얼을 계산해보자. public class Factorial { public static void main(String[] args) { System.out.println(factorialRec(5)); // 120 } public static int factorialRec(final int number) { if (number == 1) { return number; } else { return number * factorialRec(number-1); } }.. 2021. 5. 11.
Singleton(면접단골질문) Singleton 은 객체 생성을 제한시키는 목적외에도 지연 초기화(lazy initializaion) 목적도 있다. 기본 코드 public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) instance = new Singleton(); return instance; } } private 생성자로 외부에서 Singleton 객체를 생성하지 못하게 막고 getInstance 메서드를 통해서만 제공한다. getInstance 에서는 instance 가 null 일때만 생성하도록 해 객체 생성을 제한시킨다. 하지.. 2021. 5. 9.
Optional 형태가 가지는 의미(Monad) Monad 에 대한 정확한 개념을 다루진 않고, 자바 Optional 에서 사용하는 형태를 Monad 응용 관점에서 살펴보려고 한다. Monad 는 다양한 응용이 존재하고 Optional 는 그중 하나다(Optional 을 maybe monad 라고도 한다). Optional 에 대한 용어를 정리하면 아래와 같다. Parameterised type : Optional - T : Type parameter - Optional : Wrapper Type 즉, Optional 는 T type 이 Optional context 에 의해 wrapped 되었다고 말한다. Optional 객체는 of 메서드를 통해서 만들 수 있는데 코드는 아래와 같다. public final class Optional { priva.. 2021. 5. 6.