전체 글

전체 글

    Microservice간 통신

    Microservice간 통신

    하나의 어플리케이션 내에서 작업하고 메소드 호출로 동작하는 모놀리스 방식과 비교하여 마이크로 서비스는 물리적으로 분산된 서비스들간의 통신이 필수이다. Communication types Synchronous HTTP Communication(동기) - 기존의 웹 어플리케이션에 하나의 요청이 들어오면 해당하는 요청이 끝날 때까지 다른 작업 불가 Asynchronous Communication over AMQP(비동기) - Spring Cloud Bus에서 설명했는데 Spring Config의 정보를 각각의 마이크로서비스가 순차적으로 동기하는 것이 아니라 일단 연결되어 있는 모든 마이크로서비스들에게 전달 RestTemplate, Feign Client 두가지 RestTemplate 스프링에서 제공하는 htt..

    설정 정보의 암호화 처리(Encryption, Decryption)

    설정 정보의 암호화 처리(Encryption, Decryption)

    Encryption 종류 Symmetric Encryption (Shared) 대칭키 Asymmetric Encryption (RSA Keypair) 비대칭키(private, public key) 자바에선 keytool를 사용 복호화할때는 암호화할때 사용하지 않았던 키를 사용 암호화 -> public, 복호화 -> private 암호화 -> private, 복호화 -> public 대칭키를 이용한 암호화 Config server에 Dependencies 추가 - spring-cloud-starter-bootstrap encrypt: key: abcdefghijklmnopqrstuvwxyz0123456789 테스트 - 127.0.0.1:8888/encrypt POST - 127.0.0.1:8888/decr..

    Spring Cloud Bus

    Spring Cloud Bus

    Config 값 변경했을때 알아오는 방법 서버 재기동 (크게 의미 없음. 사용 X) Actuator refresh Spring cloud bus Spring Cloud Bus 분산 시스템의 노드(MicroService)를 경량 메시지브로커(RabbitMQ)와 연결 상태 및 구성에 대한 변경 사항을 연결된 노드에게 전달(Broadcast) Config Client 또는 Spring Cloud Config Server가 HTTP POST /busrefresh를 실행하게 되면 Sping Cloud Bus에게 알리고 연결된 Config Client 들도 함께 업데이트 처리한다. 메시지 큐잉 : 마이크로서비스들 중간에 요청사항을 가지고 있는 메시징 서버(미들웨어)를 놓아둔 형태 AMQP를 이용해서 변경사항을 일괄..

    Configuration Service

    Configuration Service

    구성정보 파일로 application.yml 파일을 사용했었는데 내용이 변경된다고 하면 어플리케이션 자체가 다시 빌드되고 배포해야 된다. 이 부분을 개선하기 위해서 어플리케이션 내부에 구성 파일을 가지고 있는 것이 아니라 외부에서 관리할 수 있도록 한다. -> 자유도, 동적 구성파일을 관리하기 위해 FTP, 네트워크 파일 시스템, 로컬 파일 시스템, Git Repository가 사용될 수 있다. Spring Boot Actuator를 이용해서 가지고 있는 구성정보 파일을 확인한다. 구성 정보 파일을 하나만 만드는 것이 아니라 개발, 테스트, 운영되는 실제 단계에 맞춰서 사용할 수 있는데 이것을 Profiles이라고 한다. Spring Cloud Config 분산 시스템에서 서버, 클라이언트 구성에 필요한..

    Users Microsservice - Login

    Users Microsservice - Login 기능 URI(API Gateway 사용시) URI(API Gateway 미사용시) HTTP Method 사용자 로그인 /user-service/login /login POST 요청을 서버에 보내면 -> header에 토큰과 userId 반환 AuthenticationFilter.java - Spring Security를 이용한 로그인 요청 발생시 작업을 처리해주는 Custom Filter 클래스 attemptAuthentication() : 사용자로부터 전달받은 데이터를 추출해서 토큰에 저장하고 인증처리 successfulAuthentication() : 인증이 되었을때 어떻게 처리해줄지 package com.example.userservice.secur..

    Catalogs, Orders Microservice

    Catalogs, Orders Microservice

    기능 마이크로서비스 URI(API Gateway 사용시) HTTP Method 상품 목록 조회 Catalogs Microservice /catalog-service/catalogs GET 사용자별 상품 주문 Orders Microservice /order-service/{user_id}/orders POST 사용자별 주문 내역 조회 Orders Microservice /order-service/{user_id}/orders GET Catalogs Microservice 프로젝트 생성 Dependencies DevTools, Lombok, Spring Web, Spring Data JPA, Eureka Discovery Client, H2, modelmapper application.yml server: ..

    Users Microservice

    Users Microservice

    Users Microservice 개요 Front-end UI는 가지고 있지 않음 APIs 기능 URI(API Gateway 사용시) URI(API Gateway 미사용시) HTTP Method 사용자 정보 등록 /user-service/users /users POST 전체 사용자 조회 /user-service/users /users GET 사용자 정보, 주문 내역 조회 /user-service/users/{user_id} /users/{user_id} GET 작동 상태 확인 /user-service/users/health_check /users/health_check GET 환영 메시지 /user-service/users/welcome /users/welcome GET Users Microservice..

    E-commerce 어플리케이션

    E-commerce 어플리케이션

    어플리케이션 개요 여기서는 어플리케이션의 비지니스 로직, 도메인 분석에 집중하기 보다는 Spring Cloud와 Spring Boot를 이용해서 마이크로서비스를 만드는 것에 중점을 둔다. 상품 조회 : [사용자 -> CATALOG-SERVICE] 사용자 조회, 주문 확인 : [사용자 -> USER-SERVICE] 상품 주문 : 사용자 -> [ORDER-SERVICE] 상품 수량 업데이트 : [ORDER-SERVICE -> CATALOG-SERVICE] - 여기서는 직접 호출하지 않고메시징 서비스를 사용할 예정(Kafka) 주문 조회 : [USER-SERVICE -> ORDER-SERVICE] - 마이크로 서비스간의 통신 발생 (직접 호출) 어플리케이션 구성 Registry Service(Eureka Se..

    API Gateway Service

    API Gateway Service

    API Gateway Service 사용자가 설정한 라우팅 설정에 따라서 각각 엔드 포인트로 클라이언트를 대신해서 요청하고 응답을 받으면 다시 클라이언트에게 전달을 하는 프록시 역할을 하게 된다. 시스템의 내부 구조는 숨기고 외부 요청에 대해서 적절한 형태로 가공해서 응답할 수 있는 장점이 있다. 클라이언트는 오직 게이트 웨이만 상대하게 된다. 인증 및 권한 부여 서비스 검색 통합 (마이크로 서비스 검색 통합) 응답 캐싱 정책, 회로 차단기 및 QoS 다시 시도 속도 제한 부하 분산 (로드 밸런싱) 로깅, 추적, 상관 관계 헤더, 쿼리 문자열 및 청구 변화 IP 허용 목록에 추가 Netflix Ribbon과 Zuul Netflix Ribbon Spring Cloud에서 MSA간 통신 1. RestTemp..

    HTTP

    HTTP/1.0 기본적으로 한 연결당 하나의 요청을 처리하도록 설계 -> 서버로부터 파일을 가져올 때마다 TCP의 3-way handshake를 계속 수행 -> RTT(패킷이 목적지에 도달하고 나서 다시 출발직로 돌아오기까지 걸리는 시간) 증가 문제 RTT 증가를 해결하기 위해 이미지 스플리팅, 코드 압축, 이미지 Base64 인코딩 사용 HTTP/1.1 매번 TCP를 연결하는 것이 아니라 한번 TCP를 초기화를 한 이후에 keep-alive라는 옵션으로 여러 개의 파일을 송수신할 수 있게 변경 (1.0에도 keep-alive가 있었지만 표준화 되어있지 않았음) TCP의 3-way handshake가 한번 발생한 다음부터 발생하지 않지만 다수의 리소스를 처리하려면 요청할 리소스 개수에 비례해서 대기 시간..