안녕하세요 선생님 분류실습2 섹터에서 학습하다가 궁금한 것이 생겨 질문합니다. 전체 로직에서 학습과 테스트 데이터셋으로 먼저 분할을 해준 뒤 전처리를 수행하는 것이 아니라 왜 전체 데이터셋에 전처리를 적용시킨 뒤에 학습과 테스트 데이터셋으로 분할이 되었는지 궁금합니다. 일반적인 상황에서 어떤 순서가 맞는 것인지 아니면 선생님만의 기준이 있는 것인지 궁금합니다.
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을 정의해도 무한루프?로 실행이 되던데 왜 그런지 알 수 있을까요?
이전에 드렸던 질문이 정리가 잘 되지 않았던 것 같아 다시 정리해 질문을 드리고자 합니다. 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을 시도하게 되는건데 이게 맞는건지 알고 싶습니다.
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 숫자를 적고 플레이 누르니 경고문구가 뜹니다. 단무지카페@지메일.com 님이 작성했으니 이곳으로 문의하라는데요. 무시하고 계속하기를 클릭하면 되나요?
@Repository public class MemberRepository { @PersistenceContext private EntityManager em; } @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; } 안녕하세요 엔티티매니저 초기화 방법에 대해 질문드리고 싶습니다. DB 2편 데이터 접근 활용 기술에서는 후자의 방법으로 초기화하셨고 이번 강의에서는 전자의 방법으로 초기화 하셨는데 검색해보니 @RequiredArgsConstructor 가 아닌 @PersistenceContext 를 사용하라는 글이 있던데 몇년 된 게시물들이었고 최근에는 @RequiredArgsConstructor 를 사용해도 괜찮다는 게시글도 봤습니다 결론적으로는 둘 다 사용해도 괜찮은지 아니면 둘 중 추천하시는 어노테이션이 있는지 그리고 둘의 차이가 궁금합니다
현재 카프카로 데이터를 보내기전에 redis를 사용하여 발급된 쿠폰 개수에 대한 동시성 처리를 해서 개수에 대한 검증 로직이 있다고 앞서 강의에서 얘기를 하셨습니다. 그러면 발급된 쿠폰 개수가 100개 되고 난 이후의 요청은 그냥 무시하면 되나요? 쿠폰이 천개, 만개 이렇게 매우 많다면 쿠폰 발급에 대한 요청을 바로 DB에 저장을 하면 DB에 부하가 심해져서 카프카를 도입해 이러한 부하를 낮춘다고 이해를 했습니다. 궁금한 점은 DB에 대한 부하를 낮춰도 이벤트 시기에 수많은 사용자들의 요청으로 인해 서버 자체에 대한 부하는 굉장히 심할꺼 같은데 서버에 대한 부하를 낮추는 방법은 없나요? 현재 흐름이 쿠폰 요청 -> 서버 -> reids에서 쿠폰 개수 확인 -> 카프카 -> 컨슈머 -> DB 인데 이러한 흐름을 요청 -> 서버 -> 카프카 -> 컨슈머 -> redis에서 쿠폰 개수 확인 -> DB 이렇게 바꾸는 방식은 어떤지 궁금합니다. 이런식으로 하면 서버쪽에서 카프카로 데이터를 비동기로 전송한다면 서버 자체에도 부하가 낮아지지 않을까 라는 생각이 들어서 여쭤 봅니다. redis streams나 래빗엠큐 같은 다른 기능들도 있는데 Kafka를 사용하신 이유가 궁금합니다. 만약 쿠폰 발급이 100개처럼 적게 발급하는 시스템이라면 굳이 카프카를 도입을 할 필요가 없는건가요? publisher가 카프카로 데이터를 보내면 consumer가 바로 받아와서 DB에 처리를 하면 안되겠죠? 이렇게 처리를 하면 바로 DB에 저장을 하는 상황이니 DB에 부하가 심해진다고 생각합니다. 현재 강사님이 알려주신 코드를 바탕으로 시스템을 구축하고 여기에 부하 테스트를 한다고 했을때 어떤 식으로 단계를 잡아서 부하 테스트를 하면 좋을지 조언을 해주실 수 있을까요 한번에 너무 많은 질문해서 죄송합니다.
팬심 또는 언젠간을 위해 강의를 전부 구매했습니다. 구매 후 기본편 까지는 강의를 다봤거든요. 그런데 교안을 너무 잘만드셔서 교안만 봐도 될꺼같다 라는 생각이 들더라구요. 물론, 강의를 진득하게 듣고 이해하여, 그것을 체화하면 자바에 대해 더 깊게 이해할 수 있겠지만, 문제는 역시 트레이드오프... 시간이 너무 많이 걸리네요. 자바 고급 2편까지 1달 반에서 2달 내로 끝내고 싶은데 강의를 들으면 도저히 그 시간을 맞출 수 없을꺼같아서 질문해봅니다. 제목 그대로 교안만으로도 충분할까요?
영상이 이해가 잘 안되 몇번을 돌려봤습니다. 제가 이해하고 있는게 맞는지 알고 싶어 문의 드립니다. 모바일에서는 콜백함수의 동작이 되지 않기 때문에, m_redirect_url 인자에 url 정보를 정의하면, 결제 페이지 이동 후, 자동으로 정의된 페이지로 이동이 된다 check_url에 의해 order.p k, payment.p k 인자 정보를 받기 때문에 order_check은 별도의 추가 코드 없이 pc와 모바일에서 동일한 동작을 보장받을 수 있다. 제가 이해하는게 맞는지 알고 싶습니다.
코드의 내용을 보자면 admin에서 action을 이용해 여러개의 쿼리셑을 받아 각각을 한번씩 처리합니다. @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, 즉 manytomany 중계 테이블내 모든 관련한 결제 내역을 가져와 cancel을 시도합니다. 결제 가능 여부를 확인하는 코드에서 보자면 def can_pay(self) -> bool: return self.status in (self.Status.REQUESTED, self.Status.FAILED_PAYMENT) 두 가지 조건만 있습니다. 실패했거나, 성공한 경우 입니다. 때문에 DB에는 관련한 주문이 여러간의 실패 + 1건의 성공의 이력인데 굳이 모든 이력을 가져와 cancel을 하는 이유가 무엇인지 알고 싶습니다.
2025 시나공 빅데이터 분석기사 실기 교재를 가지고 공부하고 있습니다. p.245 / 04.데이터 전처리 / 레이블 인코딩 관련 문의입니다. 결측치를 가지는 object 컬럼의 경우 레이블 인코딩을 하는 경우 "결측치"를 하나의 값으로 분류하는 거 같습니다. 이러한 경우 레이블 인코딩 후 결측치가 존재하지 않는 것으로 결과가 나옵니다. 문의) 결측치를 포함한 object 타입의 컬럼의 경우 결측치 변환 후 레이블 인코딩을 진행하는 게 맞는지? 결측치와 관계없이 레이블 인코딩을 진행하는 게 맞는지? 문의드립니다.