소개
게시글
질문&답변
2021.09.14
안녕하세요 Orderservice 기동시 Userservice 죽는 문제 질문드립니다!
docker compose 파일은 github에 올라가지 못해서 여기에 남깁니다. version: '2'services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" networks: my-network: ipv4_address: 172.18.0.100 kafka: # build: . image: wurstmeister/kafka ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: 172.18.0.101 KAFKA_CREATE_TOPICS: "test:1:1" KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 volumes: - /var/run/docker.sock:/var/run/docker.sock depends_on: - zookeeper networks: my-network: ipv4_address: 172.18.0.101networks: my-network: name: ecommerce-network
- 0
- 2
- 904
질문&답변
2021.09.07
DFS 방식으로 푼 것이 맞나요?
정말 감사합니다. Root, Left, Right 방식으로 코딩을해주셔서 이해가 빨리되었습니다. 결국에 root rigth left도 예제를 추가하니 방향만다르지 동일한 dfs방식이더군요.ㅎㅎ node.right.rigth같은 꼬리가 추가적으로 없어서 이해가 잘 안되었었나봅니다. 원래 의문이었던 dfs가 맞냐는 질문에도 bfs방식이 아니라 dfs방식인것도 확실히 이해하였습니다. ( node.right.rigth 같은 예제 추가를 통해서) 제가 잘 이해한 것이 맞겠죠? ㅎㅎ
- 0
- 2
- 195
질문&답변
2021.08.17
응답지연으로 어떤 테스트를 할 수 있을까요?
Loaded: 100.00% Pause Mute Current Time 11:14 / Duration 11:17 2x Playback Rate auto Picture-in-PictureFullscreen 이전 강의 다음 강의 질문 응답지연으로 어떤 테스트를 할 수 있을까요? hwajo02021.04.14 AM 10:560 안녕하세요. 강의 잘 들었습니다. 강의 다 듣고 정리하고 있는데 카오스 멍키로 응답지연을 주는 건 좋은데 응답지연을 주면 이걸 어떻게 활용할 수 있을까요?? 응답지연이 생길 때 어떻게 대응을 할지는 어디 부분에서 해줘야 하는 건가요? 00 (사진) 백기선2021.04.14 PM 12:07 A라는 서버에서 B라는 서버를 호출할 때 B라는 서버에서 응답 지연이 생긴경우에 A라는 서버에서 어떤 대응을 B2라는 서버를 호출하는 로직을 만들었다고 가정한다면 B서버를 호출하는 API에 카오스몽키를 사용해서 일부러 지연을 주고 A라는 서버가 해당 로직대로 수행하는지 테스트 해볼 수 있겠죠.
- 1
- 2
- 326
질문&답변
2021.08.12
@Loadbalanced 관련
@Loadbalanced 관련 Junyi Song2021.07.14 PM 12:180 - spring-boot: v2.5.2 - cloud: 2020.0.3 예제처럼 따라했는데, user-service -> order-service로의 접근시에는 gateway를 통하지 않고 바로 통신합니다.유레카에서 해당 서비스 IP/PORT 아이피를 바로 얻어갑니다 아래는 /user 조회시 주문 정보까지 가져올 때 gateway 로그입니니다. /user호출 |- 해당 호출에서 rest로 /order 호출 이면 gateway에서 /order 로깅이 되어야 하는데 출력이 되지 않네요. 2021-07-14 12:10:01.325 INFO 48697 --- [ctor-http-nio-3] com.socurites.cloud.filter.GlobalFilter : Global filter: baseMessage: Spring Cloud Gateway Global Filter 2021-07-14 12:10:01.327 INFO 48697 --- [ctor-http-nio-3] com.socurites.cloud.filter.GlobalFilter : Global Filter Start: request id -> 96706a17-38 2021-07-14 12:10:01.328 INFO 48697 --- [ctor-http-nio-3] c.s.c.filter.AuthorizationHeaderFilter : Authorization> authorizationHeader: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJjYzg5N2Q3ZmQ3OTU0NjFiYmVjYjFhNjE1YTE5ZjU1OSIsImV4cCI6MTYyNjIzMzI4MH0.RIMPVoIUb8UNsrTOC4UTfmG3VXF-NdwqUlzTsNIxqjr2Fp0A50DGcmBQc6qwZ6Ucwi8-kraU9FuYCgMM_nIM2Q 2021-07-14 12:10:01.331 INFO 48697 --- [ctor-http-nio-3] c.socurites.cloud.filter.LoggingFilter : Logging filter: baseMessage: Inner Logging Filter 2021-07-14 12:10:01.332 INFO 48697 --- [ctor-http-nio-3] c.socurites.cloud.filter.LoggingFilter : Logging PRE Filter: request uri -> http://localhost:8080/users/cc897d7fd795461bbecb1a615a19f559 2021-07-14 12:10:01.461 INFO 48697 --- [ctor-http-nio-3] c.socurites.cloud.filter.LoggingFilter : Logging POST Filter: response code -> 200 OK 2021-07-14 12:10:01.461 INFO 48697 --- [ctor-http-nio-3] com.socurites.cloud.filter.GlobalFilter : Global Filter End: response code -> 200 OK 2021-07-14 12:14:07.516 INFO 48697 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration 그래서 예제처럼 @Loadbalanced를 쓰려면 uri에서 "/order-service"를 제거해야만 나옵니다. 먼가 설정을 빠뜨린 것 같은데 잘 모르곘네요 00 (사진) Dowon Lee2021.07.22 AM 11:12 안녕하세요, 이도원입니다. 다음과 같이 사용자의 상세 정보를 요청하게 되면, http://ip_address:8000/user-service/users/[user_id] ex) (사진) 해당 사용자가 주문한 주문 내역이 같이 보여지게 됩니다. 이때 RestTempalte에서는 order-service에 요청하기 위해서 user-service.yml 파일로 부터 다음과 같은 주소를 사용하고 있습니다. order_service: url: http://ORDER-SERVICE/order-service/%s/orders 위에서 보시는 것처럼, EUREKA에 등록된 ORDER-SERVICE라는 애플리케이션명을 통해 직접 order service에 접속하고 있기 때문에, apigateway-service를 거치지 않고 바로 요청하게 됩니다. 만약 위 정보를 아래와 같이 apigateway를 거쳐서 접속하도록 수정한다면 apigateway-service에 해당 로그가 출력되는 것을 보실 수 있을겁니다. order_service: # url: http://ORDER-SERVICE/order-service/%s/orders url: http://ip_address:8000/order-service/%s/orders (사진) 위 로그는 apigateway-service에 대한 내용인데, 첫번째 request id -> c5045b2f-53는 user-service에 대한 요청이고, 두번째 request id -> 3925e9cb-1는 user-service에서 order-service를 요청한 내용입니다. 추가로, 위와 같이 Eureka의 ORDER_SERVICE라는 애플리케이션명 대신 직접 ip address를 지정해서 사용하실 경우에는 user-service에서 RestTemplate 빈을 등록하실 때 @LoadBalanced 어노테이션을 넣지 말고 실행하시기 바랍니다.
- 0
- 2
- 529
질문&답변
2021.08.11
안녕하세요! 질문있습니다.
안녕하세요! 질문있습니다. ygh2021.05.11 PM 23:240 안녕하세요. 좋은 강의 감사드립니다 :) 강의 19:23초경에 엔드포인트를 /health_check로 두고 get 요청을 날리셨는데, user-service의 WebSecurity에서 권한을 막아놓은 요청아닌가요? 어떻게 access denied가 발생하지 않았는지 궁금합니다. # springsecurity 00 (사진) Dowon Lee2021.05.13 PM 16:44 안녕하세요, 이도원입니다. user-service 애플리케이션에 직접 /health_check를 요청하는 것에 대해서는 접근 권한을 막지 않고 있습니다. http.authorizeRequests().antMatchers("/**") .hasIpAddress(env.getProperty("gateway.ip")) // .and() .addFilter(getAuthenticationFilter()); 위 코드에서 보시는 것처럼, 모든 요청에 대해 IP를 체크한 다음, Filter를 적용하고 있습니다. UsernamePasswordAuthenticationFilter를 구현한 AuthenticationFilter를 통해 /login endpoint를 사용할 수 있으며, user-service에서는 모든 요청(/**)에 대해 AuthenticationFilter를 적용하도록 하고 있습니다. 만약 AuthenticationFilter를 적용하지 않으면, Spring Security에서 제공하는 /login을 사용하지 못해, 직접 로그인 관련된 기능을 구현하시거나, formLogin을 사용하셔야 합니다. 강의에서는 Postman으로 테스트하고 있기 때문에, 별다른 Login 폼 없이, Spring Security에서 제공하는 /login을 사용하고 있습니다. user-service에서 구현한 endpoints에 대한 액세스 가능 여부는, 로그인 후 발급 된 토큰(JWT) 정보를 Spring Cloud Gateway(apigateway)에서 확인 한 다음, 정상적인 JWT일 경우 user-service로 요청을 전달하고 있습니다. 만약 user-service에서 직접 액세스를 제어하실려면, 다음과 같은 코드를 이용하여 확인해 보실 수 있습니다. http.authorizeRequests().antMatchers("/users") .hasIpAddress(env.getProperty("gateway.ip")) // .and() .addFilter(getAuthenticationFilter());http.authorizeRequests().anyRequest().denyAll(); - apigateway에서 호출, http://[server ip]:8000/user-service/users -> OK (사진) - apigateway에서 호출, http://[server ip]:8000/user-service/welcome -> Fail (사진) - user-service에서 호출, http://[server ip]:64768/welcome -> Fail (사진) /users 요청에 대해 GET/POST, /login 처리는 가능하며, 나머지 요청에 대해서는 모두 거부하는 것을 확인해 보실 수 있을 겁니다. 감사합니다.
- 0
- 2
- 504