학습중 궁금한 것은 언제든 문의 하세요. 질문을 최대한 자세히 남겨주시면 반드시 답변 드리도록 하겠습니다. 추가로 알고 싶은 내용도 요청해주시면 강의 자료를 업데이트 해서 제공할 예정입니다. 선생님 좋은 강의 감사합니다. 강의 재밌게 듣고 있습니다. 브로드캐스트활용해서 채팅(실시간 알림)기능 구현 강의 듣던 중 궁금한게 생겼는데요 그 전 강의에서 8080 8081 두개 서버 띄어놓고 라운드로빈으로 분배되는 것 설명하셨을 때 처럼 두개 띄어놓고 8080 8081 각각의 웹소켓으로 메세지 전송했는데 각각의 서버 별로 별도로 브로드캐스팅이 되는 것 같더라고요. 전체로 브로드캐스팅 하려면 보통 어떤 식으로 구현하나요?
학습중 궁금한 것은 언제든 문의 하세요. 질문을 최대한 자세히 남겨주시면 반드시 답변 드리도록 하겠습니다. 추가로 알고 싶은 내용도 요청해주시면 강의 자료를 업데이트 해서 제공할 예정입니다. 첫 pdf 에서 docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 이부분 뒤에 짤렸고 짤린 부분 다른 파일도 더 있는 것 같아요
학습중 궁금한 것은 언제든 문의 하세요. 질문을 최대한 자세히 남겨주시면 반드시 답변 드리도록 하겠습니다. 추가로 알고 싶은 내용도 요청해주시면 강의 자료를 업데이트 해서 제공할 예정입니다. 안녕하세요~! 10.Pub -Sub모델을 이용한 실시간 알림 (WebSocket, STOMP 이용) part 1 해당 자료가 다운이 되지 않습니다!
음.. 코드를 보다가 강사님이 설명이 잘 이해가 가지않아서 질문 드립니다. saveChatMessage같은 경우 트랜잭션을 따로 빈으로 등록하여 saveChatMessage호출 시 독립된 트랜잭션을 호출해서 웹 소켓과 연관된 메시지 저장 작업만 독립적으로 관리하기 위함이라고 생각하면 될까요?? 보통 우리가 생각하는 웹소켓으로 메시징 작업을 하기 위해서는 실시간이기 때문에... 음 성능적인 부분과 데이터의 일관성을 유지하고 다른 트랜잭션 작업과 충돌을 방지하기 위해서 웹소켓사용시의 독립적인 트랜잭션을 사용한다라고 이해하면 될까요?? 그리고 또 한가지 현재 프로젝트에서는 MySQLConfig 클래스를 따로 정의해서 커스터마이징 하였는데, 만약 커스터마이징 하지 않고 웹소켓 기능을 사용하게 되었을 때에도 독립적인 트랜잭션 기능을 사용할 수 있나요??
안녕하세요 지식공유자님. 강의에서 JwtProvider 에 @Component 어노테이션을 선언하셔서 스프링이 관리하도록 의도하신 것 같습니다. 그런데, 함수에 static 을 모두 붙이시고, 사용하는 쪽에서는 bean 으로 등록 하지 않고 static util 처럼 사용하시는 것을 확인했습니다. 질문은 두가지 입니다. @Component 를 선언하셨음에도 static 메서드를 authService 에서 사용하신 이유가 있으신지. 빈으로 만들고서도 static 함수로 사용하는 것에 이점이 있는 것인지. 답변 부탁드리겠습니다. 감사합니다.
안녕하세요 지식공유자님. User 클래스의 credentials 필드에 lazy loading 관련하여 설명을 해주셨는데요, 제가 알기로는 mappedBy 가 있는 쪽에서는 LAZY 로딩이 동작하지 않는 것으로 알고 있습니다. 즉, 연관관계의 주인인 UserCredentails 쪽에만 적용하는 것이 맞다고 생각이 드는데 제 생각이 맞을까요?
안녕하세요 지식 공유자님. MySqlConfig 클래스에 대해 질문이 있습니다. yml 에 이미 mysql 정보들을 설정했는데 MySqlConfig 클래스에서도 @Value 를 통해 설정정보를 또 작성하는 것은 무엇을 위함인것일까요? 제가 알기로는 Spring Boot의 자동 설정이 application.yml의 설정들을 자동으로 읽어와서 DataSource bean으로 구성하는 것으로 알고있는데 다시 작성하는 이유가 궁금합니다. 감사합니다.
안녕하세요, Redis Pub/Sub 수강 중 위와 같이 메시지 브로커에 문제가 있는 것 같은데, 백엔드 지식이 부족해서 정확히 어떤 부분에서부터 원인을 찾아야할지 모르겠습니다. 서버/컨테이너 재시작 해봤는데 동일한 걸로 봐서 다른 문제인 것 같아서 도움 요청드립니다. https://github.com/wozlsla/fastapi-async/blob/prac/src/shared/message_broker.py
FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring root project 'demo'. > Could not resolve all artifacts for configuration ':classpath'. > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.3.4. Required by: root project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.3.4 > Dependency requires at least JVM runtime version 17. This build uses a Java 11 JVM. * Try: > Run this build using a Java 17 or newer JVM. > 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. Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.10.2/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 2s 이런식으로 자바를 17로 올려주라고 하는데, 어떻게 수정해야 할까요?ㅠㅠ 구글에 검색해봐도 vscode 쪽에서 설정하는 방법이 자세하지 않아서요..ㅠㅠ
질문1: 강의에서 saveChatMessage() 메소드 진입시 @Transactional(transactionManager = "createChatTransacationMansger") 사용하는것을 말씀 해주셨는데요. 선생님께서 말씀해주신 강의 내용을 그대로 말씀드리자면 " 웹소켓 같은 경우에는 하나의 커넥션 즉 세션을 하나에 계속 공유하고 계속 사용 중이기 때문에 이 스톰프를 사용하는 웹소켓 통신 아니면 기본적인 웹소켓 통신에서도 이 트랜잭션에 대한 경계가 되게 명확하지가 않는 경우가 있습니다. " 즉 이 말씀은 따로 이렇게 @Transactional public void saveChatMessage(Message msg) { chatRepository.save(chat); } @TransactionManager() 만 추가해서 관리 하면 문제가 생기고 @Transactional(transactionManager = "createChatTransacationMansger") 이렇게 별도로 TransactionManager 를 추가해서 관리 해야 문제가 없다고 이해 하면 될까요??? 왜 TransactionManager 를 따로 만들어서 관리하는지 이해가 안가네요 ㅠ,ㅠ 그리고 "웹소켓 같은 경우에는 하나의 커넥션 즉 세션을 하나에 계속 공유하고 계속 사용 중이기 때문에 이 스톰프를 사용하는 웹소켓 통신 아니면 기본적인 웹소켓 통신에서도 이 트랜잭션에 대한 경계가 되게 명확하지가 않는 경우가 있습니다" 즉 이 말씀은 saveChatMessage 경우는 웹소켓 전용만 사용 할때만 이용하는 오퍼레이션 이기 때문에 다른 HTTP 통신 경우에 오는 FLOW 경우는 saveChatMessage() 메소드는 사용하지 마라 라는 의미로 @Transactional(transactionManager = "createChatTransacationMansger") 이렇게 별도의 TransactionManager을 사용한 것인지 궁금 합니다. 질문2 선생님이 말씀해주신 내용을 그대로 말씀드리자면 플러시는 기본적으로 JPA에서 다루고자 하는 트랜잭션이 담겨있어야 되는데 담겨있지 않았다는 에러가 발생하게 될 거예요 왜냐하면 제가 말씀드렸던 것처럼 웹소켓은 하나의 통신으로만 공유를 하기 때문에 경계가 명확하지 않아서 JPA 에서 일반적으로 트랜지액션을 잘 인식을 하지 못하고 잘 넣어주지를 못합니다 이렇게 트랜젝션을 선언하지 않으면 문제가 발생된다고 해주셨는데요. @Transactional public <S extends T> S save(S entity) { Assert.notNull(entity, "Entity must not be null"); if (this.entityInformation.isNew(entity)) { this.entityManager.persist(entity); return entity; } else { return this.entityManager.merge(entity); } } JPA save 메소드를 보면 이렇게 @Transaction 을 선언하기 때문에 굳이 @Transaction 을 선언하지 않아도 문제가 없지 않을까요??
채팅 실서비스 환경 관련 문의 드립니다. 웹소켓은 커넥션을 유지하는데 서비스가 인기가 있어 동시접속자가 많아지면 커넥션 고갈이 생길 것 같습니다. 이런 문제를 방지하기 위해 실 운영 환경에서는 어떻게 모니터링하고 대응하는지 궁금합니다. 실 운영 환경에선 멀티 서버 멀티 인스턴스로 동작하게 해야 할 것 같은데 이런 경우에도 @SendTo 애노테이션을 활용할 수 있나요? 없을 것 같아 질문드립니다. 실 운영환경에선 엔진엑스같은 웹서버를 거쳐 들어올 것 같은데 이럴 때 주의해야할 사항이 있을까요?
asp.net core 웹/앱, SignalR 강의 모두 들었는데. 한가지 아쉬운 점이 있습니다. 학습시 서버를 local로 열거나 현재 컴퓨터 ip로 서버를 여는데 혹시 Azure나 Aws등으로 서버를 세팅하는 강의도 추가를 해주실 수 있으신가요? 동영상이 아니라도 ppt 등 있었으면 좋겠습니다.