티스토리 뷰
이번엔 Gateway에 Config Server를 연동할 예정입니다.
User-Service의 Login은 토큰을 발급하는데 해당 토큰은 Secret에 따라서 바뀌게 됩니다.
Gateway에 인증 시스템이 있으니 User-Service의 Secret 값이 바뀌면 당연히 Gateway의 Secret값도
동일한 값으로 변경되어야 합니다. 서론이 너무 길었네요 바로 시작하겠습니다.
#pom.xml
user-service와 동일하게 dependency를 추가해줍니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
#bootstrap.yml
bootstrap Server의 접속 정보를 설정합니다.
spring:
cloud:
config:
uri: http://127.0.0.1:8888
name: ecommerce
#application.yml
application.yml의 route 정보를 수정해줍니다. gateway에서 User-Service에 원활하게 접속할 수 있도록
/user-service/actuator/** Path를 추가해줍니다. RewritePath 정보도 추가해줘야 원활하게 동작이 됩니다.
/user-service/actuator/** 에서 /actuator/** 형태로 Rewrite해줘야 하기 때문입니다.
! routes:
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/user-service/actuator/**
- Method=GET,POST
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/user-service/(?<segment>.*),/$\{segment}
- AuthorizationHeaderFilter
그리고 Actuator의 설정을 진행해줍니다. 저번과 달라진 것은 httptrace옵션을 추가할 것인데
해당 옵션은 Bean이 있어야 동작합니다. 밑에서 바로 추가해주겠습니다.
management:
endpoints:
web:
exposure:
include: refresh, health, beans, httptrace
#ApigatewayServiceApplication.java
Application 클래스에서 @Bean Annotation을 통해서 httpTraceRespository 메서드를 정희해줍니다.
return값으로는 HttpTrace와 관련된 정보를 담아줍니다.
package com.example.apigatewayservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.trace.http.HttpTraceRepository;
import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@EnableEurekaClient
public class ApigatewayServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ApigatewayServiceApplication.class, args);
}
@Bean
public HttpTraceRepository httpTraceRepository(){
return new InMemoryHttpTraceRepository();
}
}
#ecommerce.yml
이제 ecommerce.yml 파일을 다시 수정해줍니다.
token:
expiration_time: 86400000
secret: ggpark_token
gateway:
ip: 0.0.0.0
git에서 commit하는 것으로 마무리 짓습니다.
git add ecommerce.yml
git commit -m "changed some values"
#Test Case 1
테스트를 진행합니다. 다만, 주의하실점은 User-Service와 Gateway-Service를 재시작 해주시길 바랍니다.
상기의 과정을 진행하지 않으면 token인증에 실패해 404에러 폭탄을 맞습니다.
회원등록 > 로그인 > 토큰복사 > 인증 토큰을 활용한 /actuator/health 접근 과정을 진행하면
아래와 같은 화면이 출력됩니다. "status": "UP" 이 나오면 정상적으로 실행된겁니다.
#ecommerce.yml
그럼 이제 다시 ecommerce.yml파일을 수정해줍니다.
바뀌었음을 명시적으로 알기위해서 changed를 붙혀줬습니다.
Cmd를 통해서 Commit하는 과정도 잊지 말고 진행해주세요!!! 제일 중요해요!!!
token:
expiration_time: 86400000
secret: ggpark_token_changed
gateway:
ip: 0.0.0.0
#TestCase 2
실제 테스트를 진행합니다. 일단 user-service의 actuator에 접근해 config정보를 Refresh 해줍니다.
아래와 같은 메시지가 출력되면서 200 OK가 출력된다면 성공입니다.
POST 형태로 보내주는것 잊지말아주세요!
Health_Check를 해보면 다음과 같이 변경이 되어 있습니다.
이번엔 Gateway의 Config 정보를 Refresh해줍니다.
재 로그인을 진행해줍니다. Token Value가 이제 바뀐 token.secret에 따라서 변경됩니다.
해당 내용을 다시 복사해줍니다.
다시 해당 토큰 값을 이용해서 health_check를 진행해줍니다.
해당 토큰값을 이용하지 않으면 404에러를 출력합니다. 인증에 사용된 secret가 변경됨에 따라서 인증 Token값도 변경되기 때문에 기존의 바뀌기전의 값의 Token값은 더 이상 동작하지 않기에 Gateway와 User-Service 모두 Refresh 한 뒤에 재 로그인 과정을 통해서 토큰을 재 발급 받아야 합니다.
어쩌구 저쩌구... 했지만, 과정이 다소 복잡해 보이지만 서버를 내릴 필요 없이 이용 할 수 있는 점이 매력적입니다.
다만 아무리 봐도 비효율적이라고 생각이 듭니다. 그리고 이렇게 생각한건 저 뿐만이 아니라서 나온 것이 바로
Spring Cloud Bus입니다. 일단 해당 방식으로 마무리 한 뒤 Bus에 대해서 포스팅 하도록 하겠습니다.
감사합니다.
'웹 프로그래밍 > MSA 학개론' 카테고리의 다른 글
[MSA] 잠깐 쉬어가는 Remote Git Repository (Config - Service) (0) | 2022.04.25 |
---|---|
[MSA] Spring Cloud Config (Profiles) (0) | 2022.04.25 |
[MSA] User-Service와 Config Server 연동 - 2 - (0) | 2022.04.21 |
[MSA] User-Service와 Config Server 연동 - 1 - (0) | 2022.04.21 |
[MSA] Spring Cloud Config 핥아먹기 (0) | 2022.04.21 |
- Total
- Today
- Yesterday
- kafka
- 운동
- Logstash 활용
- MariaDB
- 미래의나에게동기부여
- git
- 루틴기록
- UserService
- 오늘저녁 삼겹살
- ACTUATOR
- prometheus
- LoadBalancer
- springcloud
- Spring + ELK
- elasticSearch
- Kafka Connect
- rabbitmq
- docker
- consumer
- github
- config
- 운동일기
- Feign
- Logstash to ElasticSearch
- 빅-오
- producer
- MSA
- JWT
- zipkin
- Gateway
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |