MSA (MicroServiceArchitecture) (33) 썸네일형 리스트형 느슨한 결합과 강한 결합 그림으로 느슨한 결합과 강한 결합을 설명하기 위해, 두 가지 다이어그램을 그릴 수 있다.느슨한 결합 (Loose Coupling)다이어그램: 인터페이스를 통해 구현체를 분리하여 의존성을 줄이는 구조+----------------+ +----------------+| ShoppingCart | | PaymentProcessor|| |강한 결합 (Tight Coupling)다이어그램: 클래스가 다른 클래스의 구체적인 구현에 직접 의존하는 구조+----------------+ +----------------+| ShoppingCart |------>| PayPalProcessor|| | | .. MSA에서 비동기 통신을 해야 하는 이유? 질문. 왜 비동기 통신을 통해서 의존성을 줄여야 하는가? 동기 통신 으로으로는 의존성을 줄일수 없나?비동기 통신을 통해 의존성을 줄이는 이유는 다음과 같다.성능 향상: 비동기 통신은 서비스가 응답을 기다리지 않고 다른 작업을 계속 수행할 수 있게 한다.이는 시스템의 전체 처리량을 증가시킨다.확장성: 비동기 통신은 서비스 간의 결합도를 낮추어 각 서비스가 독립적으로 확장될 수 있게 한다.내결함성: 비동기 메시징 시스템을 사용하면 한 서비스가 다운되더라도 메시지가 큐에 남아 있어 나중에 처리될 수 있다.유연성: 비동기 통신은 서비스 간의 직접적인 호출을 줄여, 서비스의 변경이 다른 서비스에 미치는 영향을 최소화 한다.동기 통신은 서비스 간의 강한 결합을 초래할 수 있으며, 한 서비스의 지연이 다른 서비스의 .. MSA에서 서비스 간 통신 오버헤드를 해결하기 위한 방법 서비스 간 통신 오버헤드를 해결하기 위한 방법은 다음과 같다:동기 통신 최소화:REST API 대신 비동기 메시징 시스템 (예: RabbitMQ, Kafka) 사용.비동기 통신을 통해 서비스 간의 의존성을 줄이고 성능을 향상.데이터 직렬화 최적화:JSON 대신 Protobuf, Avro와 같은 더 효율적인 직렬화 포맷 사용.직렬화/역직렬화 과정에서의 오버헤드 감소.네트워크 지연 최소화:서비스 간의 물리적 거리를 최소화.네트워크 인프라 최적화 및 고성능 네트워크 장비 사용.캐싱:자주 사용되는 데이터를 캐싱하여 통신 횟수 감소.Redis와 같은 인메모리 데이터 저장소 사용.API 게이트웨이 최적화:API 게이트웨이를 통해 공통 기능 처리 및 통신 최적화.로드 밸런싱, 라우팅 최적화.서비스 병합:너무 세분화된.. 3-Tier Architecture를 Micro Service Architecture로 전환할 때 서비스 분할 전략 3-Tier Architecture를 Microservice Architecture로 전환할 때 서비스 분할 전략은 다음과 같다:도메인 주도 설계 (DDD) 적용:도메인 모델을 기반으로 서비스 경계를 정의한다.Bounded Context를 식별하여 각 컨텍스트를 독립적인 마이크로서비스로 분리한다.기능별 분할:각 기능을 독립적인 서비스로 분리한다.예를 들어, 사용자 관리, 주문 처리, 결제 등을 각각의 마이크로서비스로 분리한다.데이터 분할:각 마이크로서비스가 자체 데이터베이스를 가지도록 한다.데이터베이스를 공유하지 않도록 하여 서비스 간 결합도를 낮춘다.API 게이트웨이 도입:클라이언트 요청을 각 마이크로서비스로 라우팅하는 API 게이트웨이를 도입한다.인증, 로깅, 모니터링 등의 공통 기능을 API 게이트.. 8. Kafka Connect 활용하여 sink 적용하기 # Kafka Connect를 활용하여 sink를 적용하는 방법에 대해 알아보기 1. 3개의 서비스가 실행되어 있어야 한다. - 아파치 주키퍼 - 아파치 카프카 - 아파치 커넥터 2. 실행 프로세스는 아래와 같다. - DB와 커넥션을 통해 다른 DB 및 경로로 데이터를 Sink 시키는 방식이다. 3. Kafka Sink 생성하기 - 해당 내용을 postman에 등록을 해줘야 한다. { "name":"my-sink-order-connect", "config":{ "connector.class":"io.confluent.connect.jdbc.JdbcSinkConnector", "connection.url":"jdbc:mysql://localhost:3306/mydb", "connection.user":"r.. 7. kafka로컬 테스트 및 MariaDB 로컬 설치 후 H2 클라이언트 사용하기 1. kafka 로컬에 설치 및 테스트하기 2023.04.11 - [Apache Kafka] - Windows에서 Apache kafka 실행하기 2. MariaDB 로컬 설치 http://mariadb.org/download/?t=mariadb&p=mariadb&r=11.1.0 Download MariaDB Server - MariaDB.org REST API Release Schedule Reporting Bugs … Continue reading "Download MariaDB Server" mariadb.org 3. Spring boot 에서 h2를 클라이언트로 활용하기 - 로컬에 설치한 MariaDB로 커넥션이 가능하다. - h2가 mariaDB의 클라이언트로 사용하기 위해서는 아래의 디펜던시를.. 6. git에 config 정보 저장하기 # git에 config 정보를 저장하기 1. github에 퍼블릭으로 저장소를 생성한다. spring-cloud-config라는 이름으로 저장소를 생성한다. 그리고 생성한 저장소의 주소를 복사한다. https://github.com/Nanninggu/spring-cloud-config.git Nanninggu/spring-cloud-config Contribute to Nanninggu/spring-cloud-config development by creating an account on GitHub. github.com 2. remote repository로 등록하기 - 현재 연결정보 확인 git remote -v - 위에서 복사한 레포지토리 정보를 remote 정보로 등록하기 git remote a.. 5. Config 서비스 생성 # Condig 서비스를 생성하여 환경설정 정보를 한곳에서 구현하도록 한다. Config 서비스가 필요한 이유는 여러가지 환경설정 정보를 공통으로 서비스 하도록 하는것이 첫번째 목적이고 두번째목적은 dev - stage - prd로 구성된 개발환경을 구현하기 위한것이 두번째 목적이다. 1. 새로운 폴더를 생성하고 yaml 파일을 만든다. 2. git init을 수행한다. 3. git add를 수행하여 위에서 생성한 yaml 파일을 추가한다. 4. 해당 경로를 새로 생성한 config 서비스에 등록해준다. config 서비스는 Spring Cloud Config 라는 서비스를 검색 후 디펜던시를 추가해준다. # 구현하면 아래와 같다. 1. yaml 파일 생성 2. git - ecommerce.yaml 파일.. 이전 1 2 3 4 5 다음