게시글
질문&답변
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
질문&답변
2021.08.11
JWT 다중 로그인 처리 질문
질문 JWT 다중 로그인 처리 질문 정윤성2021.06.10 PM 18:370 user-service에서 AuthenticationFilter를 거치기전 기존에 메모리나, DB에 해당 ID에대한 JWT토큰값이 존재할 경우 기존 토큰은 폐기하고 새로운 토큰값을 발급시켜 새로 로그인한 유저에게 할당해주는 방법으로 하면 괜찮을까요 ?? 00 (사진) Dowon Lee2021.06.13 AM 11:06 안녕하세여, 이도원입니다. 이전에 발급된 JWT를 폐기하고, 항상 새로 발급된 JWT만을 사용하게 하실 수도 있습니다. JWT은 기본적으로 클라이언트단에 저장되기 때문에, 적절한 LocalStorage에 저장된 JWT의 유효기간 등을 확인하여 삭제하거나 유효기간을 설정하실 수 있습니다. 그런데 스마트폰 앱에서 사용되는 몇몇 앱들은 일정 시간동안 토큰을 유지시키고, 필요시 Refresh해서 사용하는 방법을 쓰고 있습니다. 감사합니다.
- 0
- 2
- 1K
질문&답변
2021.08.11
JWT 관련 질문드립니다!
JWT 관련 질문드립니다! Byunghyun Yoon2021.05.13 AM 00:420 안녕하세요 수업 잘 듣고 있습니다. 수업 중에 궁금한게 있어 질문 드립니다. 로그인시 JWT 생성하여 응답 헤더값에 토큰과 userId를 담아 줬는데요, 생각해보니 userId를 꼭 전달해야할까 싶은 의문이 생겨서요 토큰을 디코딩하면 payload 부분에 userId가 있으니까 payload userId와 시그니처 복호화 userId를 비교해도 상관없지 않나요? 00 (사진) Dowon Lee2021.05.13 AM 07:26 안녕하세요, 이도원입니다. 말씀하신것처럼, Token에 저장 된 정보에 userId가 포함되어 있기 때문에 별도로 userId를 전달하지 않을 수도 있습니다. 그러나, 전달된 userId가 정상적인 데이터(외부로부터 위변조가 되지 않은)인지 확인한다고 가정했을 때, 해당 값과 Token에 저장된 userId값을 비교해 볼 수도 있을 것 같습니다. 그리고, Token에 저장된 데이터를 사용하기 위해서는 secret 키 필요하기 때문에, 강의에서는 2가지 방법을 다 소개 하였습니다. 감사합니다
- 0
- 2
- 312