일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- java
- Spring
- 백준 파이썬
- java 기술면접
- MSA
- 백준
- springboot
- spring oauth
- Kotlin
- 백준 17626
- JVM
- 백준 19238
- 백준 16235
- 백준 16236
- MySQL
- Coroutine
- re.split
- 프로그래머스
- spring security
- 백준 16719
- 백준 17779
- sql 기술면접
- 백준 15685
- spring cloud
- with recursive
- 파이썬
- 웹어플리케이션 서버
- JPA
- Spring Boot
- 프로래머스
- Today
- Total
목록Programming (98)
시작이 반
서비스의 시나리오를 확인해보자. user-service에서 회원가입, 로그인을하고 user는 catalog-service에서 상품목록을 보고 order-service를 통해 해당 상품을 주문한다. 상품을 주문하면 catalog-service의 상품개수가 줄어들어야 한다. 이러한 데이터를 동기화 하기위해 Kafka를 사용해보자. order-service에서 Kafka Topic으로 메시지 전송 -> Producer catalog-service에서 Kafka Topic에 전송 된 메시지 취득 -> Consumer catalog-service에 Kafka적용 ( Consumer ) 우선 kafka관련 디펜던시를 추가해준다. Kafka config와 consumer를 작성해야한다. Kafka config관련 코..
이전에는 FeignClient를 사용하여 user-service에서 http통신을 통해 order-service API를 불러왔다. 현재는 서비스마다 각각의 DB를 사용하고 있다. 하지만 order-service가 여러개 실행된다면 어떻게 될까?? 하나의 서비스가 여러개 실행된다면 각각 가지고 있는 DB또한 달라진다. order-service1 ----- db1 order-service2 ----- db2 order-serivce3 ----- db3 .... 그럼 이때 사용자가 주문을 하게된다면 어떻게 될까?? user1 사용자가 여러 주문을 하게된다면 처음에는 db1에 주문정보가 저장되고 다음 주문은 db2, 다음 주문은 db3, 또 다음 주문은 db1 이런식으로 round robin 형식으로 순차적으..
Microservice간의 통신은 동기방식과 비동기 방식 2가지가 있다. 동기방식은 하나의 요청이 들어오면 다른작업을 하지 못한다. 이는 RestTemplate, FeignClient의 HTTP 통신 방법으로 구현이 가능하다. 비동기방식은 변경된 사항을 전달해주고 서비스는 더이상 관여를 하지 않는 방식이디. 이는 AMQP라는 프로토콜을 이용하여 구현이 가능하다. Microservice간의 통신으로 FeignClient를 사용해보겠다. FeignClient - Rest Call을 추상화한 Spring Cloud Netfix에 포함된 라이브러리이다. 사용방법으로는 호출하려는 HTTP Endpoint에 대한 Interface를 생성하고 @FeingClient를 선언한다. 기존에 User-Service appl..
외부 Config 정보 바꾸기는 3가지가 있다. - 서비스 재기동 - Actuator refresh - Spring cloud bus 이전 포스트는 Actuator refresh까지 설명하였다. Actuator refresh는 어플리케이션 서버가 한두개면 문제가 되지 않지만 수백개의 서비스가 있을경우 각각의 어플리케이션마다 다 refresh를 수동으로 해줘야 하기 때문에 번거롭다. 이보다 더 편한 방법은 3번째 방법인 Spring cloud bus를 이용하면 된다. 이방법은 한쪽에서 refresh를 config와 연결된 모든 서비스를 refresh를 해주는 방법이다. 상태 및 구성에 대한 변경사하으 연결된 노드에게 전달한다. (Broadcast) 구현방법 AMQP : 메시지 지향 미들웨어를 위한 개방형 ..
분산 시스템에서 서버, 클라이언트 구성에 필요한 설정 정보(application.yml)를 외부 시스템에서 관리 하나의 중앙화 된 저장소에서 구성요소 관리 가능 각 서비스를 다시 빌드하지 않고, 바로 적용 가능 어플리케이션 배포 파이프라인을 통해 DEV-UAT-PROD 환경에 맞는 구성 정보 사용 Local 저장소, Git저장소 등에서 관리를 할 수 있다. 우선 Spring Cloud Config 프로젝트를 생성하자 config server를 디펜던시로 등록한다. main 클래스에 EnableConfigServer를 등록해준다. application.yml 파일 (포트번호 8888) server: port: 8888 spring: application: name: config-service profile..
지금까지 API Gateway, Discovery 를 만들었다. 이번에는 간단한 User-Service, order_service, catalog-service를 만들고 API와 Discovery에 등록해 볼 것이다. USER-SERVICE 사용할 APIs (함수 내용은 설명하지 않겠습니다.) 기능 URI HTTP Method 사용자 정보 등록 /user-service/users POST 전체 사용자 조회 /user-service/users GET 사용자 정보, 주문 내역 조회 /user-service/users/{user_id} GET 작동 상태 확인 /user-service/health_check GET 환영 메시지 /user-service/welcome GET (디스커버리에 서비스를 등록하기 위해서..
API gateway를 통하여 다른 서비스에 접속하였을때 자바코드와 yml을 이용하여 필터를 적용 할 수 있다. (first-service, secon-service는 안만든 상태임 filter를 설명하기 위해 예시로 작성) Java코드를 통하여 필터 적용 Configuration, Bean 어노테이션 작성(캡쳐할때 주석처리했는데 작성해야함) 프로젝트 밑에 config라는 폴더를 만들고 필터를 적용할 코드를 작성하기 위해 FilterConfig라는 class를 생성 하였고 Configuration 어노테이션을 등록해준다. 위 사진을 예로 든다면 route정보를 입력한다. path 의 정보인 /first-service/** 라는 정보로 들어가게 된다면 uri인 localhost:8001의 주소가 실행된다는..
API Gateway API Gateway Service는 사용자가 설정한 라우팅 설정에 따라서 각각 엔드포인트로 클라이언트를 대신 요청하고 응답을 받으면 다시 클라이언트에 전달해 주는 프록시 역할을 한다. 서버단에 진입로(API Gateway)를 두고 각각의 마이크로 서비스로 요청되는 것들을 일괄적으로 처리한다. 클라이언트는 gateway만 상대한다. 인증 및 권한 부여 서비스 검색 통합 응답 캐싱 정잭, 회로 차단기 및 QoS다시 시도 속도 제한 부하 분산 로깅, 추적, 상관 관계 헤더, 쿼리 문자열 및 청구 변환 IP허용 목록에 추가 API Gateway Service - Project 생성 application.yml server: port: 8000 eureka: instance: lease-r..