Spring/[인프런] Spring Cloud

    어플리케이션 배포 - Docker Container (1)

    어플리케이션 배포 - Docker Container (1)

    Microservices 실행 Intellij IDEA Exported JAR file Docker Container 여기선 Docker + Local에 배포하겠다. Docker network Bridge network 아무런 설정없이 사용하는 네트워크 호스트와 별로로 가상의 네트워크를 만들고 가상의 네트워크에서 만든 컨테이너들을 배치해두고 사용하는 것 Host network 네트워크를 호스트로 설정하면 호스트의 네트워크 환경 그대로 사용 포트 포워딩 없이 내부 어플리케이션 사용 None network 네트워크를 사용하지 않는 것 docker 네트워크 확인 docker 네트워크 생성 gateway와 subnet 마스크를 지정하지 않고 만들수 있지만 그럴 경우 나중에 자동으로 container의 ip가 할..

    어플리케이션 배포를 위한 컨테이너 가상화

    어플리케이션 배포를 위한 컨테이너 가상화

    어플리케이션을 컨테이너 가상화 기반으로 운영한다. Virtualization 가상화 물리적인 컴퓨터 리소스를 다른 시스템이나 어플리케이션에서 사용할 수 있도록 제공 플랫폼 가상화 리소스 가상화 하이퍼 바이저 - Virtual Machine Manager(VMM) 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼 Type 1 : Native or Bare-metal Type 2 : Hosted (일반적인 맥, 윈도우) Container Virtualization OS Virtualization Host OS 위에 Guest OS 전체를 가상화 VMWare, VirtualBox 자유도가 높으나 시스템에 부하가 많고 느려짐 Container Virtualization Host OS 가 가진 리소스를 적게 ..

    Mircroservice 모니터링

    Mircroservice 모니터링

    Turbine Server 마이크로 서비스에서 발생하는 각종 로그나 결과값들을 Hystrix 클라이언트의 스트림을 통해서 전송하게 되면 전송된 내용들을 모아서 (수집)로그파일처럼 가지고 있다가 Hystrix Dashboard나 다른 모니터링 도구에 전달하는 역할 Hystrix Dashboard Hsytrix 클라이언트에서 생성하는 스트림을 시각화 Micrometer + Monitoring System으로 대신한다. Micrometer http://micrometer.io/ JVM 기반의 어플리케이션의 Metrics 제공 -> 모니터링 할 정보 수집 Spring Framework 5, Spring Boot 2 부터 Spring의 Metrics 처리 Prometheus 등의 다양한 모니터링 시스템 지원 Ti..

    장애 처리와 Microservice 분산 추적

    장애 처리와 Microservice 분산 추적

    마이크로 서비스는 하나의 어플리케이션이 아니라 여러개의 서비스로 나눠져서 개발되다보니 각각의 서비스에서 문제가 생길경우 어떻게 처리하고 시작점이 어디고 끝났을때 반환을 어디에 해야할지 흐름이 중요하다. CircuitBreaker와 Resilience4j 사용 Microservice 통신 시 연쇄 오류 현재 order-service를 실행시키지 않고 요청했을 경우 getOrders()를 호출하는 과정에서 에러가 발생하여 user-service로부터 500에러를 반환받게 된다. getOrders() 가 에러가 발생하면서 500 반환되는게 맞는거 같지만 하나의 서비스가 멈춘다고해서 모든 서비스가 정지 되면 안된다. 그래서 CircuitBreaker를 활용해서 microservice 사이의 호출에서 에러가 발생..

    데이터 동기화를 위한 Kafka 활용 2

    데이터 동기화를 위한 Kafka 활용 2

    데이터 동기화 Orders -> Catalogs Orders Service에 요청된 주문의 수량 정보를 Catalogs Service에 반영 Orders Service에서 Kafka Topic으로 메시지 전송 -> Producer 역할 Catalogs Service에서 Kafka Topic에 전송된 메시지 취득 -> Consumer 역할 코드 작업 순서 : Consumer -> Producer 로 작성하면 편함 Catalogs Service 수정 org.springframework.kafka spring-kafka KafkaConsumerConfig.java (https://kafka.apache.org/0102/javadoc/org/apache/kafka/clients/consumer/ConsumerC..

    데이터 동기화를 위한 Kafka 활용 1

    데이터 동기화를 위한 Kafka 활용 1

    Apache Kafka 란? https://engineering.linecorp.com/ko/blog/how-to-use-kafka-in-line-1/ Apache Software Foundation의 Scalar 언어로 된 오픈 소스 메시지 브로커 프로젝트 (메시지 브로커 : 특정 시스템에서 다른 시스템으로 메시지를 전달할 때 사용하는 서버) 모든 시스템으로 데이터를 실시간으로 전송하여 처리할 수 있는 시스템 데이터가 많아지더라도 확장이 용이한 시스템 중간에 Kafka를 도입해서 데이터베이스(스토리지서비스)에서 전송하는 데이터가 어떤 시스템에 저장되는지 관계하지 않고 오직 Kafka 하나만 상대하게 된다. 누가 보내고 받는지 신경쓰지 않고 메시지를 보내게 된다. Producer / Consumer 를 ..

    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 분산 시스템에서 서버, 클라이언트 구성에 필요한..