묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
404 페이지
안녕하세요 실습중 동작이 되지 않아서 문의드립니다.zuul server .yml 파일 및 gradle 파일server: port: 8000 spring: application: name: my-zuul-service zuul: routes: first-service: path: /first-service/** url: http://localhost:8081 second-service: path: /second-service/** url: http://localhost:8082 plugins { id 'java' id 'org.springframework.boot' version '2.3.9.RELEASE' id 'io.spring.dependency-management' version '1.0.11.RELEASE' } group = 'com.msa' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-zuul:2.2.3.RELEASE' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } localhost:8081/welcome 요청시 정상적으로 오지만localhost:8000/first-service/welcome 요청시 404 에러떠러지고 있는데 이유를 모르겠어서 문의드립니다.
-
해결됨아키텍처 패턴 with iOS - GUI Architecture Patterns(이론)
제가 이해한게 맞는지 궁금합니다.
솔직히,, MVC나 MVP나 MVVM이나 머가 그렇게 다른지 잘 이해가 안가긴합니다..모델과 뷰를 분리하고 이를 컨트롤하는 영역을 어떻게 처리하면 좋을까 하는데서 조금씩 차이가 있어서 구분하려는게 목적인 걸까요. 뷰모델이라 한다해도 처리해야할 복잡성이 올라가면 결국 복잡해지는 건 똑같아 보입니다.. 그럼에도 불구하고 UIKit을 사용할 때 NVVM을 쓸라고 하는건 테스트가 용이하다는 이유랑, 그냥 옵저버 패턴 쓰고 싶어서인 것 같습니다. Combine이 나온 것도 뭔가 너네가 옵저버 방식 좋아하는 것 같으니까 만들었어 같은 느낌인 것 같고,, SwiftUI를 공부하면서 보니까 자연스럽게 Combine 쓰게되고 쓰다보니 자연스레 아래처럼 구조가 분리되는 것 같은데 이게 NVVM이 맞는 걸까요?뷰(들어오는 데이터 대로 그려지는 뷰 구조체 모음)모델(타입 or 인터페이스 모음)로직(뷰의 로직 처리 함수모음)스토어(상태 데이터모음)
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
sink로 등록된 topic의 값이 db에 반영되지 않습니다.
sink도 잘 등록되었고, orders topic에 json 값도 잘 전달되지만 전달된 값이 디비에는 반영되지 않아 데이터 삽입이 되지 않습니다. ㅠㅠ무엇이 문제일까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
filter에서 response body를 수정해서 client에 리턴하고 싶은데요.
response.getBody() 뭐 이런식의 메서드가 없어서요...getHeader()는 있는데.... body의 특정 문자열을 바꿔서 리턴하고자 해서 문의 해봅니다.
-
미해결Microservice 설계(with EventStorming,DDD)
usecase 작성 단계가 궁금합니다.
안녕하세요. 강의 정말 잘 들었습니다. 많은 도움이 되고 있습니다. 다름이 아니고,각 도메인모델을 도출하고 난 후, 경우에 따라 여러 모델을 일관성 있게 업데이트해야하는 경우 유스케이스(서비스)를 이용하게 되는데요. 유스케이스의 디자인은 어느 시점에 어떻게 해야하는지 궁금합니다. 강의내용에서는 모델(entity)만을 도출하고 난 후, 패턴을 언급하며 마무리하고 있어서,실질적으로 구현을 위한 유스케이스 디자인 단계가 빠져 있는거 같아서요. 감사합니다!
-
해결됨냉동코더의 알기 쉬운 Modern Android Development 입문
강사님! 직렬화 라이브러리를 Moshi, kotlin serialization 두개를 사용하시던데 이유가 있으신가요?
강사님! 직렬화 라이브러리를 Moshi, kotlin serialization 두개를 사용하시던데 이유가 있으신가요?찾아보니까 코틀린의 serialization 만 이용해도 되지 않을까해서요retrofit 에서도 제이크와튼이 만든 컨버터 라이브러리도 있더라구요?https://github.com/JakeWharton/retrofit2-kotlinx-serialization-converter#download그런데 0.8 버전이긴하네요;;;혹시 어떤 이유가 있으셔서 room 에는 serialization, retrofit 에는 moshi 를 사용하신걸까요?!그리고 매번 답변해주셔서 정말 감사합니다 (__)
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
docker 생성 후 gateway userservice 연결 시 에러
게이트 웨이를 도커에만 올리면 에러가 나옵니다 500 Server Error for HTTP POST "/user-service/login"io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: /127.0.0.1:8889 유레카에서 유저 서비스 클릭 시 : /127.0.0.1:8889요렇게 나오는데 http://localhost:8888/user-service/default에서는{token.expireDate: 20002666,order_service.url: "http://order-service/order-service/%s/orders",order_service.exception.user_empty: "user's ord exist3333",user_service.url: "http://user-service/user",user_service.exception.user_empty: "user_Empty",token.secret: "1234"}gateway.host: "172.18.0.6",token.expireDate: 20002666,이렇게 나옵니다 http://localhost:8000/user-service/default이건 에러가 나구요도커의 네트워크는 추가 했구요"Containers": { "11a12dd45aaa3274226b1b462e1997b50e9b7ed61b405595c0c3b89393d6e036": { "Name": "rabbitmq", "EndpointID": "3425a23e5c021d2bcc307bed1d9b4ac03c17b92d4828f8b633469d8bbe8df8ac", "MacAddress": "02:42:ac:12:00:04", "IPv4Address": "172.18.0.4/16", "IPv6Address": "" }, "28da3474585596f6a3a435e48cfc9084e7d397fafaea751537ac7c82ac81bfd1": { "Name": "user-service1", "EndpointID": "543022aef70070d571f9d193151af692e59c5bc752feb15b5a0d75d23338ff34", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", }, "47dbfe92f425d933ca6e72018eb11b95f0cba48434be9b28f571570787db0d02": { "Name": "gateway-service", "EndpointID": "f3cfa36a9b73a2a925d62f0d8045d51dd8bdb4afe3b2926cae6a4997bac92114", "MacAddress": "02:42:ac:12:00:06", "IPv4Address": "172.18.0.6/16", "IPv6Address": "" }, "b4910d66fee36364691710a189c79f47c2a7fac7675166bbb102b6dfba83ef80": { "Name": "eureka", "EndpointID": "23d981be13ce1a1e7f1f4b85ea61553a13d73dfcf5af6039e6befa68d0cea497", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }, "e5326aa441bdcf8133c66384251212b14d1d0a452291a462a667de21e3f23c6c": { "Name": "config", "EndpointID": "5f8de35288b1d51927f840e050203671ff0c880b0b8f39c2dd614055c49306bc", "MacAddress": "02:42:ac:12:00:05", "IPv4Address": "172.18.0.5/16", "IPv6Address": "" } 어디가 문제일까요?
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
JWT 토큰 유효성 검사
안녕하세요! 좋은 강의 제공해주셔서 감사합니다. 다름이 아니라, 수업에서 JWT 토큰 유효성 로직을 api gateway service에 구현했는데, user-service가 아닌 gateway service에 구현한 이유가 있을까요? api gateway에 토큰 유효성 로직을 구현하게 되면, 만료된 토큰으로 api gateway를 거치지 않고 바로 user-service에 요청하는 경우, 토큰 유효성 검사를 하지 않아서 문제가 발생할 수 있지 않나요?
-
해결됨냉동코더의 알기 쉬운 Modern Android Development 입문
EditText 는 kill 해도 값이 잘 저장되어있던데 혹시 제가 잘못테스트했을까요?
EditText 는 saveState 가 활성화되어있어서id 만 지정하면 시스템언어변경하거나해도 잘 불러오더라구요그래서 강사님처럼 kill 명어로도 강제 종료를 시켜봤는데그래도 잘 복원이 되더라구요강의에서 kill 로 종료하면 복구가 안되기 때문에 직접 뷰모델에 SaveStateHandle 을 이용하신다고 했는데그럼 실제 개발할때는 EditText 뷰인경우 SaveStateHandle 을 사용하지 않아도 될까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
JWT Token SigningKey 관련 질문
안녕하세요. 강의를 수강하던 중 이해하기 힘든 현상을 발견되어 이렇게 질문드립니다.Jwt는 SigningKey로 복호화가 가능하다면, 유효한 토큰이다.(유효한 토큰이다란 기준이 여러 개 있습니다만) 라고 알고 있는데요. 아래와 같은 현상을 발견하게되서 질문하게 되었습니다.(현재 Gateway server - token.secret = A)(현재 User service - token.secret = A)1.User-service 회원생성2.User-service 로그인 (응답에서 jwt토큰 복사)로그인 시 User-service의 token.secret을 SigningKey로 jwt 토큰 발급3.Gateway의 AuthorizationHeaderFilter를 통과하는 user-service/actuator/health 호출 (response, 200)여기까지는 정상입니다만4.ecommerce.yml의 token.secret 변경 및 커밋5.Gateway의 /refresh 호출액츄에이터에 의한 token.secret 변경 (현재 Gateway server - token.secret = B)(현재 User service - token.secret = A)(현재 JWT 토큰의 SigningKey = A)6.Gateway의 AuthorizationHeaderFilter를 통과하는 user-service/actuator/health 호출 (response, 200) 여기가 질문 포인트입니다. AuthorizationHeaderFilter의 isJwtValid의 코드를 보면subject = Jwts.parser().setSigningKey(env.getProperty("token.secret")) .parseClaimsJws(jwt).getBody() .getSubject();이런 구문이 있습니다. Jwt 생성 당시의 Siginingkey랑 다른 signingkey로 복호화하면 오류가 나면서 인가에 실패하는 것을 기대했습니다. 하지만 왜 정상적으로 200을 반환하는지 이해가 잘 되지 않습니다. (Gateway의 token.secret은 B로 변경됨을 로그로 확인했습니다. )
-
해결됨냉동코더의 알기 쉬운 Modern Android Development 입문
서버도 페이징 기능이 되는데 Paging 라이브러리가 필요할까요?
문득 페이징을 공부하다보니로컬 데이터의 경우 한꺼번에 받아오는 경우가 많아서 페이징이 필요하다고 생각되지만예제에 사용한 API 는 페이지 size 까지 정할 수 있는데 Paging 라이브러리를 사용하는 이점이 무엇이있을까 궁금합니다...!
-
해결됨냉동코더의 알기 쉬운 Modern Android Development 입문
GSON 이 아닌 Moshi 를 사용하시는 이유가 있을까요?
냉동코더님은 GSON 이 아닌 Moshi 를 사용하시는 이유가 무엇인지 궁금하네요!
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
H2 console 에서의 문제
안녕하세요.먼저 좋은 수업을 강의 해주셔서 감사합니다!다름이 아니라 제가 해당 수업 진행 중 오류가 있어서 문의드립니다!mysql 콘솔에서는 오류가 발생 하지 않았으나,H2 Console 에서 테이블을 조회시 SELECT * FROM ORDERS;(conn=42) Table 'mydb.ORDERS' doesn't exist 42S02/1146 이러한 에러가 발생하는데 원인이 무엇일까요??order-service 에서 조회시에는 문제가 없습니다..
-
해결됨냉동코더의 알기 쉬운 Modern Android Development 입문
EditText 는 액티비티가 재생성되어도 값이 남아있던데 이유가 궁금해요
책검색 구현 내용 설명해주실때EditText 는 액티비티가 재생성되어도 값이 남아있던데 조금만 더 자세하게 왜 그런지 키워드만이라도 좀 알려주실까요? EditText 에서 어떤부분을 찾아봐야 알 수 있는지 모르겠네요..아 질문등록하고 좀 더 찾아봤는데 saveEnabled 속성으로 알아보면되겠네요View는 기본적으로 saveEnabled="true"가 기본값 입니다.
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
GATEWAY-SERVICE 를 통하여 호출하지 않는 이유가 있을까요?
마이크로 서비스 사용간 (RestTemplate 혹은 Feign) 에서 Eureka 의 서비스 명으로 USER-SERVICE 같은 마이크로 서비스명을 통하여 직접 호출하면 결론적으로는 GATEWAY-SERVICE 를 통하여 사용했을때의 장점을 잃어버리는 것 같은데, 섹션 10 에서는 게이트웨이를 통하지 않고 직접 서비스를 호출하는 이유가 있을까요?
-
해결됨냉동코더의 알기 쉬운 Modern Android Development 입문
ViewModel 생성시 왜 초기값을 받지 않도록 했을까요?
구글은 왜 ViewModel 생성시 초기값을 ViewModel 생성자로부터 받지않고ViewModelProvider , Factory 를 이용해서 ViewModel 을 생성하나요?!OOP 개념과 관련되어있을것같은데 여쭤봅니다..!
-
해결됨Microservice 설계(with EventStorming,DDD)
대여 도메인 장 관련 문의드립니다.
대여 모델링 강의에서 RentalItem<VO>에서 overdued, overdueStartDate라는 맴버 변수가 있는데요. 혹시 이걸 반납 예정일을 나타내는 dueDate로 바꾸면 어떨까요? 이러면 ReturnItem<VO>에 RentalItem<VO>를 추가할 때 바로 추가할 수 있을거 같고, 반납 예정일을 연장한다고 했을 때 유연하게 대응할 수 있을것 같습니다.좋은 강의 감사합니다. ^^
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
MSA에서 데이터를 가져오는 방법
MSA에서 다른 어플리케이션의 데이터를 가져오는 방법으로 RestTemplate, FeignClient를 사용하는 방법을 알려주셨는데요.데이터를 가져오는 것은 보통 rest 통신을 사용하여 가져오나요?실무에서 카프카나 다른 라이브러리를 사용해서 가져오는지, 아니면 설명해주신 것 처럼 rest 통신을 통해 가져오는지 궁금합니다~
-
해결됨Microservice 설계(with EventStorming,DDD)
애그리거트 추출 질문드립니다.
안녕하세요 선생님,자세한 도메인 기술은 어렵다고 생각해서 간략하게 상황을 가정하겠습니다.기존에 있던 애그리거트는 한 뭉탱이로 돌아다녔는데기획이 변경되어 스토밍으로 추출했던 기존 애그리거트 루트와 VO 객체가 서로 생명주기가 다른 상황이 되었습니다.루트가 VO를 리스트로 가지고 있으며 루트가 생성되고 특정 이벤트 후에 VO가 생성되어 루트에 추가되고 일정시간이 지나면 VO를 업데이트 해야 하는 상황입니다.VO가 불변객체라 리스트에서 새로운 객체로 갈아치우 것도 아닌 거 같아서,, 현재 억지로 갈아치우게끔 만들어 놓긴 했습니다,,또, 아무리봐도 서로 생명주기가 달라 VO를 다른 애그리거트로 전환하려고 하는데제가 애그리거트들을 수정하는데 있어 근거가 부족하거나, 놓치는 부분이 있을까요?
-
미해결냉동코더의 알기 쉬운 Modern Android Development 입문
Room DB에 id 항목 추가
즐겨찾기 아이템 삭제시 undo를 할 때 아이템이 원래있었던 위치로 오게 하려면 autoGenerate의 id항목을 추가해 primaryKey로 지정하면 된다고 하셨는데요Book 이 API로 책정보를 가져오는 용도로도 사용해서 Search할 때 documents에 id가 없다는 에러가 발생합니다이를 해결하기 위해선 DB에 사용할 Entity를 따로 생성해 id항목을 추가해주어야 하나요?