Spring Cloud
-
Spring Cloud Feign - 2. Feign을 사용하여 통신하기Spring Cloud/Spring Cloud Feign 2024. 1. 29. 17:37
서버 2개를 띄우고 한쪽 서버에서 반대쪽 서버를 호출하여 값을 가져오도록 해보려 한다. 멀티모듈로 구성했습니다. 멀티모듈 관련해서는 이 글을 봐주세요! fegin 을 통하여 다른 서버에 요청할 프로젝트를 만든다. 요청받을 서버를 만들었다. http 통신이기 때문에 url 주소만 있으면 되므로 서버는 Feign이 필요가없다. Feign-client 모듈에서 FeignClient를 사용한다고 명시한다. 2개의 서버를 띄울것이기 때문에 main-server 모듈의 port를 8081로 변경한다. main-server는 feign-client든 다른 client든 상관없이 누구든 요청할 수 있도록 RestController를 작성한다. 데이터는 편하게 String 하나만 리턴하도록 하였다. main-server..
-
Spring Cloud Feign - 1. Spring Cloud Feign 알아보기Spring Cloud/Spring Cloud Feign 2024. 1. 29. 15:42
공식문서 4.1.0 으로 공부하였습니다 Feign은 Netflix에서 처음 만들어졌다가, Spring 에서 Boot Starter에 넣으면서 Spring cloud feign 이 된 것으로 알고 있다. 번역기를 돌려보면 선언적 웹 서비스 클라이언트이고, 플러그인형태로 인코더와 디코더를 지원한다고 적혀있다. 또 Spring MVC에서 Annotation으로 지원한다고 적혀있다. Eureka와 CircitBreaker, LoadBalancer를 통합하여 Feign을 사용하면 로드 밸런싱된 http 클라이언트를 제공한다고 적혀있다. 편하게 Application.class 에 Annotation으로 Feign 을 사용한다 명시하고, 인터페이스에 FeignClient Annotation을 달아서 사용하는 것 같다..
-
Spring cloud gateway - 5. Eureka를 통해 서버 연결하기Spring Cloud/Spring Cloud GateWay 2023. 12. 14. 14:23
이 글을 쓰기 위해 중간에 Spring cloud eureka 글을 썼다. 이전 글까지는 gateway에서 client의 주소를 직접가지고 있어서, EKS라던지 서버가 새로 구성 될 때마다 주소가 변경되면 gateway application.yml에 적힌 각 서비스의 주소도 변경을 했어야 하는데, 이젠 주소를 Eureka Server가 registry에 등록하고 있고, Client가 그것을 참조하니 gateway도 각 서버의 application name만 알고 있으면 된다 (EKS 같은 K8S환경에서는 Eureka를 사용해도 되지만, service.yml에 등록된 이름으로도 서로 통신이 가능하여 eureka를 안써도 된다) gateway를 제외한 나머지 서비스들은 Spring cloud eureka에서..
-
Spring cloud eureka - 4. client 다중 등록하기Spring Cloud/Spring Cloud Erueka 2023. 12. 14. 13:47
처음 적었던 글을 보면 Eureka Client는 복제하여 같은 서비스를 여러개 등록하고, Eureka Server는 각 Client service로 요청을 분배하는 LoadBalancer 역할을 한다. 코드 저번 글에서 만든 eureka client을 복사해서 2로 만들었다 로컬에서 띄우기 때문에 IP가 localhost로 동일하여 port를 8080에서 8081로 변경하였다. Eureka Server에 같은 Service라는 것을 알려주기위해, application.name은 변경하지 않았다. 코드 실행 Application name이 동일하여 같은 서비스로 인식하고 등록되었다. 실제 운영환경이라면 eureka client2를 만들 필요없이 1을가지고 서버 두곳에 띄우고 Eureka Server가 띄..
-
Spring cloud eureka - 3. eureka client 만들고 등록하기Spring Cloud/Spring Cloud Erueka 2023. 12. 13. 17:46
Server는 만들었고, 이번엔 Client를 만들어서 Server에 등록 해보려고 한다. 코드 Spring web과 Eureka client를 dependence로 넣었다. EurekaClient 설정에 대해 적혀있다. Server에 등록되야 하기 때문에 Server쪽에서 false로 설정했던 것들을 지워서 기본값 true로 설정되게 하였다. defaultZone에 Eureka Server의 주소를 넣었다. 코드실행 Eureka Server에 등록 됐다고 나온다. 그런데 Client이름이 UNKNOWN으로 되어 있다. Application에 이름이 UNKOWN으로 되어있다. 코드 client의 yml에 spring.application.name 으로 이름을 지정할 수 있다. 코드 실행 기존에 UNKOW..
-
Spring cloud eureka - 2. eureka server만들기Spring Cloud/Spring Cloud Erueka 2023. 12. 13. 17:25
각 서버들의 정보들을 모집할 Eureka server를 만들어야 한다. 코드 웹이기 때문에 Spring web을, Eureka Server이기 때문에 EurekaServe를 Dependencies에 넣었다. Annotation에 EnableEurekaServer를 넣으면 된다. 코드 실행 default 주소로 들어가보면 eureka console을 볼 수 있다. 그런데 intellij console을 보면 에러가 계속 발생한다. 무슨 설정을 한 것도 없는데 Connection refused가 발생하고 있다. 찾아보니 Eureka Server의 기본 port는 8761인데 나는 default port 8080을 사용하고 있어서 발생한다고 한다. 코드 - port를 8761로 변경하면? port를 8761로..
-
Spring cloud eureka - 1. eureka 란Spring Cloud/Spring Cloud Erueka 2023. 12. 13. 16:42
LoadBalance는 이중화 된 서버에서 한 쪽으로 요청이 몰리는 것을 방지하기 위해, 라운드로빈등 여러가지 방식으로 트레픽을 분산하는 것을 말한다. Eureka는 각 서버의 정보를 가지고 있고, 요청이 들어오면 분산해서 서버에 요청하는 역할을 한다. 똑같이 Netflix에서 만든 Feign과 같이 사용을 많이한다. Eureka는 Server와 Client로 되어있다. Eureka Server Eureka Client의 정보를 가지고 있고, Eureka Client의 요청이 왔을 때, 해당 요청에 맞는 다른 Eureka Client의 정보를 전달 한다. 동일한 서비스의 Client가 여러개가 떠 있으면 LoadBalance 역할을 한다. 일정 시간 간격으로 각 Client에 Ping을 보내고 응답이 없..
-
Spring cloud gateway - 4. filter를 통해 Path 수정하기Spring Cloud/Spring Cloud GateWay 2023. 12. 13. 15:44
저번 글에서 클라이언트가 MSA환경의 모든 서버의 주소를 알고 있어야하는 이슈를 해결하기 위해 gateway의 주소에 서버이름의 path를 붙여 보내면 gateway가 알아서 route를 하도록 했었다. 그런데, gateway의 조건문 때문에 서버도 똑같이 자기 서버이름의 path를 계속해서 써야하고, 그것을 생각 안하기 위해서 yml에 context-path를 붙여 사용했다. 그렇게 되면 API 경로가 /users/api/v1/users 로 users가 중복되어, 내눈엔 이상해보였다. 그래서 이번에는 서버는 자기 자신의 이름을 붙일 필요가 없고, 클라이언트는 붙이되 gateway에서 해당 경로조건을 인식하고 조건 path를 떼어 보내도록 작성하려고 한다. 코드 Spring cloud gateway 공식..