All

개요Event Driven Architecture는 MSA에서 Producer가 여러 Consumer 서비스를 직접 호출해야 했던 구조에서 Event Broker 하나에만 이벤트를 전송하면 되는 구조로 개선했다는 것이 가장 큰 특징이다. 이로 인해 서비스가 느슨하게 결합(Loosely Coupled)되고, 결합도가 낮아진다. 다음 문단부터 정리할 EDA의 장단점은 이러한 EDA의 특징 때문에 생기는 것이라고 이해할 수 있다.장점확장성시스템에 부하가 증가할 때 Producer와 Consumer를 scale out(수평적 확장) 할 수 있다.Producer가 Counsumer를 직접 호출하지 않기 때문에 시스템을 크게 재설계하지 않아도 된다유연성새로운 이벤트나 처리 로직을 추가할 때 기존 컴포넌트에 미치는 ..
https://www.ssemi.net/what-is-the-bearer-authentication/ 토큰 기반 인증 Bearer AuthenticationOAuth를 들어가려고 생각하다가, 이전에 Bearer scheme 부터 조져야 겠다는 생각을 먼저 해봤다 블로그에 글을 쓸 때 마다 드는 생각Bearer scheme 에 대해서 정확히 설명을 하기 위해서 여러 자료들을 봤www.ssemi.net
· misc
FCM을 이용해서 습관 알림을 구현하는 방식에는 아래와 같은 이슈가 있습니다. 사이드 프로젝트로 정해진 시간에 알림을 보내는 기능을 구현하면서 생각했던 이슈를 공유합니다. 참고로 클라이언트는 PWA로 구현하고 있습니다.이슈기기가 인터넷에 연결되어 있지 않을 때 동작하지 않습니다동시에 1000개의 메세지만 전송할 수 있습니다. 1000개가 넘어가면 사용자가 지정한 시간에 보낼 수 없습니다.https://stackoverflow.com/questions/42927065/limit-of-bulk-firebase-cloud-messaging#comment83876716_42928210해결법구글에서는 캘린더 앱과 같은 예시에서는 로컬 알림을 스케줄링 할 것을 권장합니다.https://firebase.google...
· MSA
개요이번 글의 주제는 Kafka, Pulsar와 같은 Event Streaming 플랫폼, 그리고 이를 소비하는 Flink에서 메세지를 주고받을 때 Serialization, Deserailization을 하는 이유를 알아보는 것입니다. Flink 예제 코드를 보면서 동작 과정을 분석할 때 정확히 알아야 겠다는 생각이 들어서 조사해 보았습니다.PulsarSource source = PulsarSource.builder() .setServiceUrl("pulsar://host.docker.internal:6650") .setTopics("order-topic") // Deserialization - 왜 할까? ..
· Flink
개요StreamExecutionEnvrionment에는 런타임에 대한 Job별 구성 값을 설정할 수 있는 ExecutionConfig가 포함되어 있습니다. 모든 작업에 영향을 미치는 기본값은 conf 디렉토리의 Configuration File에서 설정할 수 있다설정 목록setClosureCleanerLevel(): 클로저 클리너 레벨은 기본적으로 ClosureCleanerLevel.RECURSIVE로 설정되어 있습니다. 클로저 클리너는 Flink 프로그램 내부의 익명 함수 주변 클래스에 대한 불필요한 참조를 제거합니다. 클로저 클리너가 비활성화되면, 익명 사용자 함수가 주변 클래스를 참조할 수 있으며, 이는 일반적으로 직렬화할 수 없습니다. 이로 인해 직렬화 도중 예외가 발생할 수 있습니다. 설정값은 ..
· Flink
개요Flink에서 Execution Environment는 Flink Application을 개발할 때 가장 먼저 획득하는 인스턴스의 클래스입니다. 이 글에서는 Flink에서 Execution Environment의 개념을 용어 중심으로 파고들어 Flink의 아키텍처를 이해해 보겠습니다.public class WindowWordCount { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream> dataStream = env ..
스프링스프링과 객체 지향의 관계스프링은 다음 기술로 다형성, OCP, DIP를 가능하게 지원DI(Dependency Injection): 의존 관계, 의존성 주입DI 컨테이너 제공자바 객체를 컨테이너에 넣고 안에서 의존 관계를 연결하고 주입하는 기능 제공클라이언트 코드의 변경 없이 기능 확장구현체를 쉽게 교체할 수 있다스프링이 없을 때는OCP, DIP 원칙을 지키며 개발하다 보니 할 일이 많았다⇒ 프레임워크로 만들어버림순수하게 자바로 OCP, DIP 원칙을 지키면서 개발을 해 보면 DI 컨테이너 (스프링 프레임워크)를 만들게 된다정리모든 설계에 역할과 구현을 분리해야 한다역할만 정의해 두고 구현체는 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계이다다형성, OCP, DIP를 지켜야 함스프링 ..
자바 언어의 다형성다형성으로 인터페이스를 구현한 객체를 실행 시점에 유연하게 변경할 수 있다다형성의 본질인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다협력이라는 객체 사이의 관계에서 시작해야 함클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다ex) Repository를 상속하는 MemoryRepository, JdbcRepository 로 변경 가능역할과 구현을 분리유연, 변경 용이기존의 클라이언트 코드에 영향을 주지 않는다확장 가능한 설계인터페이스를 공유하기 때문에 가능한계인터페이스가 변경되면 클라이언트, 서버 모두 큰 변경 발생인터페이스를 안정적으로 잘 설계하는 것이 중요스프링과 객체 지향다형성이 가장 중요스프링은 다형성을 극대화해서 이용할 수 있게 도..