All

배경클라이언트가 서버로 요청하면 응답WASTCP/IP 커넥션 연결Servlet 호출서블릿 객체를 누가 호출하는가?⇒ 쓰레드쓰레드애플리케이션 코드를 순차적으로 실행프로세스프로세스: 프로그램 실행쓰레드: 프로그램 안에서 여러 가지 갈래로 나뉨자바 main() method를 처음 실해아면 main이라는 이름의 thread가 실행자바 애플리케이션을 실행시키는 주체가 threadthread가 없다면 자바 애플리케이션 실행 불가능쓰레드는 한 번에 하나의 코드 라인만 수행동시 처리가 필요하면 thread 추가로 생성단일 요청 - thread 하나 사용요청이 온다쓰레드 할당쓰레드로 서블릿 코드 실행응답 후 쓰레드 휴식다중 요청 - thread 하나 사용한다면요청2 들어옴요청1의 쓰레드의 서블릿 처리가 지연되고 있음DB..
· MSA
정의Saga Pattern은 분산 환경(MSA)에서 트랜잭션을 처리하는 데 사용되는 아키텍처 패턴이다.분산 트랜잭션을 서비스 간 트랜잭션으로 모방한다같은 서비스에서 하나의 DB에 동작하는 ACID 트랜잭션을 모방그러나 Isolation(독립성)은 달성할 수 없다각 서비스에서 트랜잭션을 실행하여 하나의 트랜잭션처럼 보이게 한다실패 시 보상 트랜잭션(Compensationg Transaction)을 수행하여 일관성을 유지한다.구현 방식Orchestration중앙 집중 관리중앙 서비스가 다른 서비스를 적절한 순서로 호출실패 시 중앙 서비스가 이미 호출한 서비스를 어떻게 보상할 지 알고 있다서비스 호출 후 응답을 기다린다응답을 기다리지 않는 비동기 통신으로 최적화 가능다른 서비스에 명령 전달ex) e커머스 주문..
정의시스템 컴포넌트 간의 통신을 위해 이벤트를 생성하고 감지하는 아키텍처이벤트: 무언가 발생한 것시스템의 상태 변화Event Notification으로 전달명령과 관련된 데이터를 포함할 수도 있고, 단지 무언가 발생했다는 알림일수도 있다불변(immutable) 이다⇒ Event Sourcing의 원천이 된다명령(Command): 다른 시스템에게 응답을 요청하는 것Event Sourcing데이터 변경 이벤트를 저장하고 시스템의 상태를 재구축하는 방식데이터 변경 히스토리 추적데이터 일관성 보장구성 요소Producer: 이벤트 생성Broker: 이벤트를 적절한 Consumer로 라우팅Consumer: 이벤트를 수신하고 처리이벤트 기반 아키텍처나 메세지 기반 아키텍처에서는 Publisher-Subscriber ..
· MSA
정의서비스 간 통신을 처리하는 소프트웨어 계층컨테이너화된 마이크로서비스로 구성서비스 간 연결을 관리하기 위해 모니터링, 로깅, 추적, 트래픽 제어 등 기능 제공마이크로서비스 수가 증가하여 서비스 성능 모니터링하기 어려워지는 문제 해결도입 이유애플리케이션 성능은 서비스 간 통신 속도와 탄력성에 따라 좌우된다. 그러나 MSA에서는 분산된 마이크로서비스를 모니터링하기 어렵다.서비스 레벨에서 모니터링많은 서비스가 연동하여 작동하는 방식을 이해하기 어려움ex) 다운스트림 및 업스트림 종속성서비스와 워크로드가 통신하는 방식을 더 잘 관찰서비스 레벨에서 제어서비스가 서로 통신하고 수행하는 작업을 제어서비스의 동작, 정책, 상호 작용에 대한 세밀한 제어 및 관리 기능ex) 규제를 준수하기 위한 보안 정책 적용이점분산 ..
· MSA
SOA (Service Oriented Architecture)정의개별 서비스에 초점을 맞춘 아키텍처 스타일Monolithic Design과 반대되는 개념서비스를 재사용하거나, 독립적인 여러 서비스를 결합하여 복잡한 태스크 수행ex) 사용자 인증 서비스를 생성해서 모든 애플리케이션에서 재사용특징데이터(DB) 공유ESB (Enterprise Service Bus)여러 서비스가 있는 시스템과 통신할 때 사용할 수 있는 소프트웨어기술과 관계 없이 서비스와 서비스 소비자 간의 통신을 설정데이터 모델 변환, 연결성/메시징 처리, 라우팅, 통신 프로토콜 변환요청을 각 서비스에 맞는 프로토콜로 변환각 서비스로의 연결을 한 포인트로 중앙 집증SOA vs MSASOA는 데이터 공유, MSA는 데이터 복제, 세분화SOA는..
개요 리액티브 프로그래밍은 데이터 스트림을 함수로 조작하고 비동기적으로 작업하는 프로그래밍 패러다임이다. 데이터 소스에서 발생하는 데이터 이벤트 스트림을 옵저버가 구독하여 처리한다. 리액티브 프로그래밍은 함수형 프로그래밍 개념을 활용하여 데이터 스트림을 선언적으로 처리하는 패러다임이다. 복잡한 비동기 프로그래밍을 단순화할 수 있다. 함수형 프로그래밍 (Functional Programming) 프로그램을 순수 함수(Pure Function)의 조합으로 구현하는 프로그래밍 패러다임 순수 함수 (Pure Fucntion) Deterministic: 동일한 입력에 대해서 항상 동일한 출력을 반환하고 Side Effect 없음: 함수를 실행하며 외부 상태를 변경하지 않는 함수 비동기 프로그래밍 (Asychron..
https://leetcode.com/problems/create-maximum-number/description 핵심 아이디어 숫자 붙여서 최댓값 만들기 + 순서 유지 -> Greedy 정렬 + 순서 유지 -> Decreasing Monotonic Stack 리스트의 사전 순 비교는 Python의 max(list1, list2)를 이용할 수 있다 (결과 길이) l1, l2 모든 길이 조합 경우의 수 구하기 어떤 값을 안 쓰면 결과 달라지기 때문 숫자 붙이기 - Greedy결과가 최댓값이 되는 건 모든 값을 사용하는 조건에서만 성립한다 설명 이 문제는 아래처럼 나누어서 풀어야 한다 두 리스트를 조합해서 가장 큰 결과를 만든다 Greedy하게 큰 값 선택 같은 값이면 뒤..
정의 객체 지향 프로그래밍에서 Factory는 다른 object를 생성하는 object이다. factory method: new Class object를 반환하는 메소드 예시 // ShapeFactory 클래스 class ShapeFactory { // 도형을 생성하는 Factory Method public Shape createShape(String type) { if (type.equalsIgnoreCase("circle")) { return new Circle(); } else if (type.equalsIgnoreCase("rectangle")) { return new Rectangle(); } return null; } } 생성자와 팩토리의 차이 클래스 기반 프로그래밍에서 Factory는 생성자..