Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
안녕하세요! 강의 잘 듣고 있습니다. 다름이아니라 section10.class01.StepVerifierTimeBasedTestExample04 여기서 expectNoEvent 이 오퍼레이터가 시간을 기다려 주는 기능을 한다 이렇게 이해했는데 제가 조금 커스텀해서 찍어보다 보니 작동 방식이 도저히 이해가 되지 않아서 질문 남겼습니다. 아래 코드 처럼 1분마다 emit되는 예제에서 중구, 서초구는 1분씩 기다렸으니 순서대로 나오는게 맞는데 그 다음은 2분을 기다렸으니 강동구가 나와야 할 것 같았는데 강서구가 나오더라고요. expectNoEvent라는 오퍼레이터가 가지는 의미를 어떻게 이해야 할지 도저히 감이 안잡힙니다...ㅠ [전체코드(테스트성공)] public class StepVerifierTimeBasedTestExample04 { @Test public void getCOVID19CountTest() { StepVerifier .withVirtualTime(() -> TimeBasedExample.getVoteCount( Flux.interval(Duration.ofMinutes(1)) // 1분마다 data를 emit ) ) .expectSubscription() .expectNoEvent(Duration.ofMinutes(1)) // 1분동안 아무런 이벤트가 발생하지 않음 .expectNext(Tuples.of("중구", 15400)) // 첫번째 튜플 .expectNoEvent(Duration.ofMinutes(1)) .expectNext(Tuples.of("서초구", 20020)) .expectNoEvent(Duration.ofMinutes(1)) .expectNoEvent(Duration.ofMinutes(1)) .expectNext(Tuples.of("강서구", 32040)) .expectNoEvent(Duration.ofMinutes(1)) .expectNextCount(2) .expectComplete() .verify(); } } [getVoteCount 함수] public static Flux<Tuple2<String, Integer>> getVoteCount(Flux<Long> source) { return source .zipWith(Flux.just( Tuples.of("중구", 15400), Tuples.of("서초구", 20020), Tuples.of("강서구", 32040), Tuples.of("강동구", 14506), Tuples.of("서대문구", 35650) ) ) .map(Tuple2::getT2); }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 11분17초경에 나오는 while2_3 코드변경문제 질문입니다 while문 맨 끝에 i++;를 작성하지 않으면 i <= endNum을 정의해도 무한루프?로 실행이 되던데 왜 그런지 알 수 있을까요?
안녕하세요. 오늘 처음 수업을 시작하면서 <header> <nav>영역에 splitting 적용을 해봤는데요. 해당 모션이 적용되지 않아 문의드립니다. 혹시나 싶어 codepen 예제만 따로 만들어봤는데 동일한 현상이 생기고 있어 제가 무엇을 잘못하고 있는지 알 수가 없습니다. 완성본을 따로 받아 볼 수 있을지도 문의드립니다.
디지털포렌식 입문자를 위한 디지털포렌식 전문가 2급 실기 시험대비 강의(Encase/Autopsy)
혹시 아래와 같이 직관적으로 MBR과 BR을 쉽게 구분하는 방법이 있을까요? (예시) MBR : Press Ctrl+Alt+Del to restart ..........가 없음, 바로 다음 섹터에 BOOTMGR이 없음 BR : Press Ctrl+Alt+Del to restart ..........가 있고, 바로 다음 섹터에 BOOTMGR이 있음
이전에 드렸던 질문이 정리가 잘 되지 않았던 것 같아 다시 정리해 질문을 드리고자 합니다. cancel() 함수와 관련하여 아래 동작에 대해 이해가 잘 되지 않아 질문을 합니다. 먼저 admin에서 action을 통해 여러개의 선택된 항목들에 대해 queryset을 가져와 for을 이용해 각 항목에 대해 cancel 처리를 하나씩 수행합니다. @admin.display(description=f"지정 주문결제를 취소합니다.") def make_cancel(self, request, queryset): for order in queryset: order.cancel("관리자가 주문결제를 취소했습니다.") self.message_user(request, f"{queryset.count()}개의 주문결제를 취소했습니다.") 그리고 이후에 호출되는 Order의 cancel()에서는 orderpayment_set.all()을 사용해 하나의 주문에 대한 모든 결제시도 내역을 가져오는 코드를 동작하는 것으로 이해가 됩니다. def cancel(self, reason=""): for payment in self.orderpayment_set.all(): payment.cancel(reason=reason) 관련한 코드를 확인하니 orderpay 모델은 order_pay 뷰에 의해 생성이 되며, 생성 조건으로 주문요청 혹은 결제실패 상태가 됩니다. 그렇다면, orderpayment_set.all() 코드는 한 주문에 대해 성공 및 결제실패에 대한 모든 저장된 결과를 가져와 cancel을 시도하게 되는건데 이게 맞는건지 알고 싶습니다.
20분 정도에서 말씀주신 내용처럼 콘솔을 찍어보려고 하는데 다음과 같은 에러가 발생했습니다. C:\developing\zeroCho\nodeJs\nodebird\models\index.js:19 file.index(".") !== 0 && file !== basename && file.slice(-3) === ".js" ^ TypeError: file.index is not a function 그래서 일단 코드를 다음과 같이 수정했습니다. [기존 코드: return file.index(".") !== 0 &&...] fs.readdirSync(__dirname) .filter((file) => { return ( !file.startsWith(".") && file !== basename && file.slice(-3) === ".js" ); 문제는 또 다른 에러가 발생했는데 C:\developing\zeroCho\nodeJs\nodebird\models>node index.js hashtag.js Hashtag C:\developing\zeroCho\nodeJs\nodebird\node_modules\sequelize\lib\model.js:662 throw new Error("No Sequelize instance passed"); ^ Error: No Sequelize instance passed at Hashtag.init (C:\developing\zeroCho\nodeJs\nodebird\node_modules\sequelize\lib\model.js:662:13) at Hashtag.initiate (C:\developing\zeroCho\nodeJs\nodebird\models\hashtag.js:5:13) at C:\developing\zeroCho\nodeJs\nodebird\models\index.js:30:11 at Array.forEach (<anonymous>) at Object.<anonymous> (C:\developing\zeroCho\nodeJs\nodebird\models\index.js:25:4) at Module._compile (node:internal/modules/cjs/loader:1469:14) at Module._extensions..js (node:internal/modules/cjs/loader:1548:10) at Module.load (node:internal/modules/cjs/loader:1288:32) at Module._load (node:internal/modules/cjs/loader:1104:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12) 그래서 일단 이것도 modules 폴더 내에서 사용된 initate 메서드를 init으로 변경했습니다. <예시> const Sequelize = require("sequelize"); class Hashtag extends Sequelize.Model { static init(sequelize) { Hashtag.init({ title: { type: Sequelize.STRING(15), allowNull: false, unique: true, }, }); } static associate(db) {} } module.exports = Hashtag; 그랬더니 이번에는 무한 재귀 에러가 발생하였습니다 C:\developing\zeroCho\nodeJs\nodebird\models>node index.js hashtag.js Hashtag C:\developing\zeroCho\nodeJs\nodebird\models\hashtag.js:5 Hashtag.init({ ^ RangeError: Maximum call stack size exceeded at Hashtag.init (C:\developing\zeroCho\nodeJs\nodebird\models\hashtag.js:5:13) at Hashtag.init (C:\developing\zeroCho\nodeJs\nodebird\models\hashtag.js:5:13) at Hashtag.init (C:\developing\zeroCho\nodeJs\nodebird\models\hashtag.js:5:13) at Hashtag.init (C:\developing\zeroCho\nodeJs\nodebird\models\hashtag.js:5:13) at Hashtag.init (C:\developing\zeroCho\nodeJs\nodebird\models\hashtag.js:5:13) at Hashtag.init (C:\developing\zeroCho\nodeJs\nodebird\models\hashtag.js:5:13) at Hashtag.init (C:\developing\zeroCho\nodeJs\nodebird\models\hashtag.js:5:13) Node.js v20.18.0 대안은 super.init을 호출하는 것이라고 하는데 제가 지금 해결방향을 제대로 잡고 있는건지 아니면 점점 산으로 가고 있는건지 저 스스로는 판단이 안 됩니다. 사실 이 문제가 전 파트에서 시퀄라이저 진도 나갈 때도 발생했었는데 같은 문제가 다시 발생해서 굉장히 당황스럽습니다. 도움 부탁드립니다.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
에뮬레이터 만들시 안드로이드 랭기지만 뜨고 ios랭기지는 안뜨고있는데 왜그런걸까요. . 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다! [코드팩토리 디스코드] https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
video_call. 수업 진행중 플러그인 까지 설치 진행후 실행 하니 아래와 같은 에러가 나왔습니다. FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring project ':agora_rtm'. > Could not create an instance of type com.android.build.api.variant.impl.LibraryVariantBuilderImpl. > Namespace not specified. Specify a namespace in the module's build file. See https://d.android.com/r/tools/upgrade-assistant/set-namespace for information about setting the namespace. If you've specified the package attribute in the source AndroidManifest.xml, you can use the AGP Upgrade Assistant to migrate to the namespace value in the build file. Refer to https://d.android.com/r/tools/upgrade-assistant/agp-upgrade-assistant for general information about using the AGP Upgrade Assistant. * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. BUILD FAILED in 5s Error: Gradle task assembleDebug failed with exit code 1 이 오류는 agora_rtm 라이브러리의 build.gradle 파일에서 namespace가 지정되지 않아 발생한 문제입니다. Android Gradle Plugin(AGP) 7.0.0 이상에서는 namespace를 build.gradle 파일에 명시적으로 설정해야 합니다. 어디서 무엇을 수정해야 할지 모르겠습니다.
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 숫자를 적고 플레이 누르니 경고문구가 뜹니다. 단무지카페@지메일.com 님이 작성했으니 이곳으로 문의하라는데요. 무시하고 계속하기를 클릭하면 되나요?
이렇게 @GroupSequence 를 사용해서 검증의 순서를 정하고싶은데 예를 들자면 클라이언트에서 이메일을 작성할때 "ㅇㅇ" 이런 식으로 작성을 하면 @NotBlank 가 통과가 되고 @Email 이 실행이 되어야 하는거 같은데 실행이 되지 않습니다 그리고 실행이 안되는줄 알았지만 아래 아이디 비밀번호를 입력 하게되면 이때 형식에 맞지 않다는 오류 메시지가 나오게 됩니다, 어떻게 해야 할까요.. package hello.instar.validation; import jakarta.validation.GroupSequence; import jakarta.validation.groups.Default; @GroupSequence({Default.class,ValidationGroups.NotBlankGroup.class, ValidationGroups.EmailGroup.class,ValidationGroups.SizeGroup.class, }) public interface ValidationSequence { } @NotBlank(groups = ValidationGroups.NotBlankGroup.class) @Email(groups = ValidationGroups.EmailGroup.class) private String email;