Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
WebFlux의 Non-Blocking의 장점이 "여러 작업에 대해서 단일 스레드로 이벤트 루프 방식으로 Blocking 없이 여러 작업을 번갈아 가며 처리 가능하다" 라고 이해를 했습니다. 강의의 예제도 보았고 또 여러 예제를 만들어 돌려 보아도, 단일 스레드로 여러 subscribe() 요청을 번갈아가면서 처리하는 것을 확인하지를 못하였습니다. 물론 publishOn 이나 subscribeOn, parallel 을 이용 혹은 flatMap 과 delayElements 를 사용하여 별도의 스레드를 띄워 구현한다면 여러 스레드가 병렬로 동시에 여러 요청의 작업을 처리 할 수 있다는 것은 알고 있습니다. 하지만 이 방법은 결국 다수 스레드를 생성하여 각각의 스레드가 각각의 작업을 처리 하는 구조가 되어 Tomcat기반의 동기 MVC 방식에서의 Blocking 멀티스레드와 별반 차이를 체감하지 못하였습니다. 예를 들어 reactor.netty.ioWorkerCount=1 로 설정하고 Rest API "/api/stream" 를 만들어 클라이언트 A가 GET 호출로 구독 시 클라이언트 B는 A가 연결을 끝날때 까지 대기하였습니다. (Blocking MVC와 동일 동작) (기대한 것은 단일 스레드로 클라이언트 A와 B의 요청을 번갈아가며 처리) 또다른 테스트로 main메소드에서 퍼블리셔에 대해 2개의 subscriber가 거의 동시 구독하였을 경우 먼저 시작한 subscriber의 처리가 다 끝나고 그다음 subscriber가 처리 진행하였습니다. (물론 스케줄러 나 delayElements, webclient 등 내부적으로 별도 스레드를 띄우면 병렬 처리 됨) [제가 테스트한 결과 1 - 단일 스레드 순차 수행] [main] WebFluxExample - main - A1 시작 [main] WebFluxExample - main - A2 완료 [main] WebFluxExample - main - A3 완료 [main] WebFluxExample - main - A 체인 최종 결과: A1 -> A2 -> A3 [main] WebFluxExample - main - B1 시작 [main] WebFluxExample - main - B2 완료 [main] WebFluxExample - main - B3 완료 [main] WebFluxExample - main - B 체인 최종 결과: B1 -> B2 -> B3 [제가 테스트한 결과 2 - 멀티 스레드 병렬 수행] [main] DEBUG reactor.util.Loggers - Using Slf4j logging framework [boundedElastic-1] WebFluxExample - boundedElastic-1 - A1 시작 [boundedElastic-2] WebFluxExample - boundedElastic-2 - B1 시작 [boundedElastic-1] WebFluxExample - boundedElastic-1 - A2 완료 [boundedElastic-2] WebFluxExample - boundedElastic-2 - B2 완료 [boundedElastic-1] WebFluxExample - boundedElastic-1 - A3 완료 [boundedElastic-2] WebFluxExample - boundedElastic-2 - B3 완료 [boundedElastic-1] WebFluxExample - boundedElastic-1 - A 체인 최종 결과: A1 -> A2 -> A3 [boundedElastic-2] WebFluxExample - boundedElastic-2 - B 체인 최종 결과: B1 -> B2 -> B3 [원하는 결과 - 단일 스레드 병렬 수행] [동일스레드] WebFluxExample - 동일스레드- A1 시작 [동일스레드] WebFluxExample - 동일스레드- B1 시작 [동일스레드] WebFluxExample - 동일스레드- A2 완료 [동일스레드] WebFluxExample - 동일스레드- B2 완료 [동일스레드] WebFluxExample - 동일스레드- A3 완료 [동일스레드] WebFluxExample - 동일스레드- B3 완료 [동일스레드] WebFluxExample - 동일스레드- A 체인 최종 결과: A1 -> A2 -> A3 [동일스레드] WebFluxExample - 동일스레드- B 체인 최종 결과: B1 -> B2 -> B3 하여 진정한 Webflux의 Non Blocking, 즉 단일 스레드로 (동시 병렬이 아닌) 여러 작업을 번갈아가며 처리하는 것이 가능하다면 처리하는 예제와 결과를 보여주시면 감사하겠습니다.
안녕하세요! 강의 유익하게 듣고 있는 수강생입니다. 컨테이너 가상화 설명에서 궁금증이 생겨 글 남깁니다. (강의 장면 캡쳐가 불가하여 유사 그림으로 대체합니다!!) 도커는 호스트 OS의 커널을 바로 사용한다는 장점이 있다고 이해했습니다. 이때 여기서 호스트 OS가 리눅스라고 명시되어있는데 mac, windows를 사용하는 일반 사용자들도 호스트 os가 리눅스로 적용되는 것일 까요?? 해당 내용을 찾아보니 도커를 사용할 때는 리눅스 커널이 필수적으로 필요해서 가상화된 Linux를 내부적으로 사용한다고 확인했습니다. 이 내용을 리눅스 환경이 아닌경우 도커 내부에 리눅스가 가상화 기술로 적용되어 있다고 이해하는 것이 맞을까요?? 내장되어 있는 것이 맞다면 컨테이너 별로 리눅스가 별도로 포함되는것인지, 도커위에 하나의 리눅스OS를 갖고 있는 것인지 질문드리고 싶습니다! 유익한 강의 정말 감사드립니다 😀
수업 9분 50초 부근에서 " 함수를 인자로 받아서 로직을 결정 하는 형태가 전형적인 고차 함수이다." 라는 부분이 있습니다. 하지만 getOperaion 함수를 보면 Myfunction을 반환하지만 인자로 코드 조각을 받지 않고 getOperation 내부에서 로직을 작성하게 되는 형태인데, 그럼 getOperation 함수는 고차함수라고 부르기 어려운걸까요?? 고차함수의 특징은 함수형인터페이스를 파라미터로 받아서 클라이언트 코드쪽에서 로직(코드 조각)을 람다식으로 받아서 처리하는 형태를 고차함수라고 이해하고 있습니다. 하지만 getOperation은 파라미터로 String 타입 하나만 받고 람다식을 getOperation 내부에서 정의하고 있기에 코드 조각을 파라미터로 받지 않았으니 고차함수라고 보기 어려운걸까? 라는 의문점이 있습니다
안녕하세요 주말코딩님 고생많으십니다. 3가지 질문이 있어 적어보았습니다. 7분50초 유형 2자식 show에 this.value가 아닌 그냥 value여도 20을 출력하는지? 12분유형 4 부모에서 y=a없이 프린트문에 Y대신 a로 출력을 하면 안되나요? 20분 유형 10 child에서 int x를 정의하고 child()->child(x) 로 변경하면 부모와의 매개변수 숫자가 동일하니 오류가 안나나요?
안녕하세요 강사님 해당 강의에서 headless service 통신 테스트를 해봤는데요 deployment + headless service 상황에서 pod내부에 아래 명령어를 했는데 찾지 못한다고하는데 nslookup [pod명].[svc명].[ns].svc.cluster.local 혹시 statufulset만 가능한건가요?
✅ 모든 질문들은 슬랙 채널에서 답변드리고 있습니다. 💡 ”로펀의 인프런 상담소” 슬랙 채널 가입하기 💡 평일중에는 퇴근 이후(저녁 7시)에 답변을 받아보실 수 있고, 주말중에는 상시 답변드리고 있습니다. 안녕하세요! 로펀님 강의 잘 보고 있습니다 ㅎㅎ 다름이 아니고 TodoList에서 할일 CRUD 기능을 구현할 때 20:34초에서 onChange 함수에 async, await를 걸어주셨는데, hover 하니까 await이 아무 효과가 없다고 뜨더라구요 혹시 그럼에도 await를 달아주신 이유가 있나요? 이전에 같이 일하던 동료분도 가끔 이렇게 쓰셨었는데.. 그때는 제가 await가 아무런 작용을 안하는데 왜 쓰지? 하면서 다 뺐었거든요.. 😂 그러면 안됐을까요... 🥲 궁금합니다!!
(기출) 2024년 3회 10분 50초대 Python 문제 질문 elif 문 type(value) == type(""): 에서 "" 이거는 빈 문자열 같은데 이 경우에도 type이 'str'로 나오나요? C언어에서 빈 문자열은 NULL로 인식된다고 했던 거 같아 질문드립니다.
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오) [질문 내용] 아래에 public static int add(int a, int b) 이 부분에서 빨간줄이 그어지며 실행이 안되는 상황입니다. 해결방법이 있을까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 선생님 질문이 있는데요 중복 회원 예외에서 예외가 안터지고 그냥 테스트를 성공해버립니다 뭐가 문제일까요? 아래 구글 드라이브 링크 걸어뒀습니다. @Test public void 중복_회원_예외() throws Exception { //given Member member1 = new Member(); member1.setName("kim"); Member member2 = new Member(); member2.setName("kim"); //when memberService.join(member1); memberService.join(member2); //then fail("예외가 발생해야 한다."); } 예외가 발생하지 않습니다. 코드 압축해서 드라이브에 올렸습니다. https://inf.run/CFDK6
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 지금 강의에서 instance를 이런식으로 선언해서 사용하고 있습니다. Object instance = constructor.newInstance("hello"); 이렇게 사용한다는건 instance가 Object타입으로 선언이 된거고 그렇다면 BasicData로 다운캐스팅을 해준 후에 call 메서드를 불러야 맞는게 아닌가요? 이게 Object 타입인데 call 메서드가 문제 없이 작동하는게 조금 괴리감이 들어서 질문드립니다..!