일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ./gr
- 동기
- IPC
- formmatted
- 로그인 인증 흐름
- RESTfull API
- java I/O
- 퍼시스턴스 계층
- 비동기
- @temproal
- JPA
- Java
- 토큰기반 인증
- 스프링부트
- http
- 작업명중복
- 비즈니스 계층
- ./gradlew docker
- spring
- 어노테이션
- JWT
- 프레젠테이션 계층
- ORM
- 세션기반 인증
- 스프링
- 스프링 부트 테스트
- MSA
- 로그인/로그아웃
- 스프링부트 구조
- 스프링부트 계층구조
- Today
- Total
목록Back-end/MSA (10)
[DEV] J-Jay
IPC(Inter Process Commuication) Async(비동기) 패턴의 한계→ 특정 상황들에서는 필연적으로 2번이상 데이터를 받을 가능성이 있다. Async(비동기) 통신을 활용해서 중요한 비즈니스를 하기는 어려울까? Q. Async에서는 2번이상 수신되는 것을 해결하고 싶으며, Sync에서의 장점으로 설명되었던 중요한 비즈니스에서도 리소스 활용을 최적화 해서 사용하고 싶다면 어떤 방법이 있을까? A. 멱등성(Idemptotent)이 필요한 상황을 식별한다.멱등성(Idemptotent) 이란? → 특정 호출이 1번 혹은 여러번 호출되더라도 서버의 상태는 1번 호출된 것과 동일해야 한다는 특성이다. 일반적으로 Update, Delete 요청은 멱등성을 가지며, Create 요청은 멱..
IPC(Inter Process Commuication) Async(비동기) 패턴 → Queue를 활용하여 Produce, Consume 방식으로 데이터 통신 MQTT (Message Queuing Templemetry Transport) - Spec ↓ 기능↓ 쓰지 않음- 경량 메시징 프로톸로로서, IoT 경량화가 최대 목적인 프로토콜- Publish, Subscribe, Topic 사용AMQP (Advanced Message Queuing Protocol)- 엔터프라이즈 레벨의 메시징 시스템을 위한 프로토콜- MQTT 개념 외에도, Exchange, Binding 등 개념 추가- Rabbit MQ, Active MQ... Publisher(발행자)는 Exchange(Routing 역할)만 바라본다..
IPC(Inter Process Commuication) Sync(동기) 패턴 HTTPOSI 7 응용 계층의 통신 프로토콜로서, L4 계층에서는 TCP 방식을 활용하는 프로토콜여러가지 종류의 메서드가 존재하지만 일반적으로 4개의 메서드를 활용한다. (GET, POST, PUT, DELETE)gRPC (google Remote Procedure Call)Protocol Buffer 라는 것을 기반으로 하는 원격 프로시저 호출 프로엠워크일반적으로 Server to Server Call 경우에 한해 사용빠르지만, 번거로운 작업과 위험이 수반 (ex stub파일 생성, type을 하나만 잘못 넣어도 전체 error)
IPC(Inter Process Commuication) 전 사전 지식 프로세스 간 통신 → 서비스 간 통신 → MSA IPC를 이용하기 위해서는 Network 통신이 어떻게 이루어지는지 이해가 필요하다.→ OSI 7 계층(Open Systems Interconnection), TCP/IP 모델OSI 7계층(Open Systems Interconnection), TCP/IP 모델 들은 한 곳에서 다른 곳으로 통신이 어떻게 되는지설명하는 모델이다. 논리적으로 이해 → TCP/IP (4 계층) 모델ISO 표준 → OSI 7계층 모델 IPC(Inter Process Commuication) 방식 일반적인 IPC 는 크게 2가지로 나눌 수 있다.Sync(동기) 방식 (Restful, Http, gRPC)→ 적..
"분해" 로 인해 생기는 문제 해결 방법 문제1: 수 많은 서버와 수 많은 서비스들은 어떻게 배포하고 관리 할 것인가?해결1: Container로 관리 → Docekr문제2: 그럼 많은 컨테이너는 또 어떻게 관리할 것인가?해결2: Container Ochestration로 관리 → K8S, docker-compose(경량)문제3: MSA환경에서의 모니터링(로깅, 메트릭, 트레이싱, 서비스 메시)은 어떻게 할 것인가?해결3(로깅)- 수많은 서버(IDC, CLoud 내의 수많은 서비스들의 로그들을 적절히 필터링 하여 누락없이 로그 저장소까지 전송- 수 많은 로그들을 적절히 인덱싱 하여, 필요 시 빠르게 다양한 조건으로 검색→ EFK, ELK해결3(메트릭, 얼럿)- 수 많은 서버(IDC, Cloud) 내의, ..
1. 모듈간 통신 → 서비스(프로세스) 간 통신 (개발자 입장) Method(Function) Call을 해서 → Network(http, grpc, ... ) 통신을 한다는 과정이라고 했을때,일반적인 상황에서는 모놀리식이든, MSA든 전혀 차이가 없다. 하지만! 항상 모든 이슈는 문제(장애) 상황에서 발생한다. 발생 가능한 문제들요청에 대한 처리량(throughput)이 급격히 하락↓→ 필요한 컴퓨팅 자원의 최적화 어려움 → 성능 하락 or 낭비 가능성http,grpc 프로토콜 상의 이슈로 문제가 생기는 경우 디버깅이 어려움→ Connection Pool 관리→ 한정된 리소스로인한 JVM 최적화가 더 어려워짐으로써 의도치 않은 결과 발생 가능성 ↑ → http, grpc 프로토콜에 디펜던시가 있는 지식..
ExecutorService 1. Thread Pool을 이용하여 비동기적으로 작업을 실행하고, 관리한다. 2. 별도의 Thread를 관리하지 않아도 되므로 코드가 간결하게 유지된다 3. Thread 풀을 이용하여 자원을 효율적으로 관리한다. public interface ExecutorService extends Executor { //Runnable 인터페이스를 구현한 작업을 Thread Pool에서 비동기적으로 실행 void execute(Runnable command); /* Callable 인터페이스를 구현한 작업을 Thread Pool에서 비동기적으로 실행, 해당 작업의 결과를 Future 객체로 반환 */ Future submit(Callable task); /* ExecutorService..
Future 1. 비동기적인 작업을 수행한다. 2. 해당 작업이 완료되면 결과를 반환하는 인터페이스다. public interface Future { boolean cancle(boolean mayInterruptIfRunning); boolean isCancelled(); boolean isDone(); V get() throws InterruptedException, ExcutionException; V get(long timeout, TimeUnit unit) throws InterruptedException, ExcutionException, TimeoutException; } isDone() Future의 상태를 반환한다. Task가 완료되었다면, 원인과 상관없이 True를 반환한다. isCan..
Blocking Caller는 Callee가 완료될떄까지 대기한다. 제어권을 Callee가 가지고 있다. Caller와 다른 별도의 Thread가 필요하지 않다(혹은 Thread를 추가로 쓸수도 있다) A: Caller는 getResult가 결과를 돌려 주기 전까지 아무것도 할 수 없다.(동기 - Blocking) B: Caller는 getResult가 결과를 구하고 callback을 실행하기 전까지 아무것도 할 수 없다. (비동기 - Blocking) → Caller는 getReulst가 완료 될 때까지 대기한다. (Blocking) → Caller를 호출한 후, Callee가 완료되기 전까지 caller는 아무것도 할수 없으며, 제어권을 Callee가 가지고 있다. Non-Blocking Callee..
Caller와 Callee 함수가 다른 함수를 호출하는 상황 Caller : 호출하는 함수 Callee: 호출 당하는 함수 함수형 인터페이스 함수형 프로그래밍을 지원하기 위해 java 8부터 도입 1개의 추상 메서드를 가지고 있는 인터페이스 함수를 변수에 할당하거나 인자로 전달하고 반환값으로 사용 가능하다 (1급 객체) Fuction, Consumer, Supplier, Runnable 등이 있다 함수형 인터페이스를 구현한 익명 클래스를 람다식으로 변경 가능하다 A (동기) main은 getResult() 메소드의 결과에 관심이 있고, getResult() 결과를 이용해 다음 코드를 실행한다 public class A { public static void main(String[] args) { Syste..