안녕하세요 빈 공간 이동에서 에러가 발생해서요. 영웅 소환을 할 경우 client쪽에서 아래쪽 가운데에 계속 소환이 됩니다. 원인은 클라이언트가 시작 시 홀더가 생성될 때 모두 아래쪽 가운데에서 생성되고 있었습니다. 강의를 세번이나 보고 확인했는데 틀린 곳을 찾지 못하겠어요. 깃헙 주소도 부탁드려요.
[질문 내용] 여기에 질문 내용을 남겨주세요. String str1 = "123"; String str2 = "45"; String str3 = str1 + str2; 라는 코드가 있고, 이미 클래스 로드되는 시점에 문자열 풀에 "12345"라는 인스턴스가 있으면 어떻게 작동하나요?
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요. 실습 도중 MySQL이 연결되지 않아서 실습을 진행할 수 없어 문의를 남기게 되었습니다. 서버 자체는 실행이되는데 아래 사진처럼 사용자 등록, 책 등록을 하거나 목록으로 들어가려 하면 서버 내부 오류라는 메세지가 뜹니다. DB를 통해서 확인해 보려고 해도 'Connection refused: connect' 이런 오류 메세지만 뜨고 실행이 되지 않습니다. 데이터 베이스의 properties에 들어가서 다시 연결해보려고 했는데, 아래의 연결 코드와 같이 뜨고 연결이 되지 않습니다. DBMS: MySQL (ver. 8.0.40) Case sensitivity: plain=lower, delimited=lower Driver: MySQL Connector/J (ver. mysql-connector-j-8.2.0 (Revision: 06a1f724497fd81c6a659131fda822c9e5085b6c), JDBC4.2) Connection refused: connect. MySQL Command Line Client로 들어가서 초기 비밀번호를 입력하면 에러 메세지가 뜨지 않고 그대로 종료됩니다. 검색해보니 MySQL 서버가 실행되지 않아서 그런 거라고 해서 MySQL 서비스 시작을 하려고 했는데 이런 메세지만 뜨고 서비스 상태가 '중지됨'으로 나오는데 어떻게 해결해야 할까요? 에러 로그 2025-01-11 17:09:37.285 ERROR 17852 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar:na] at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:181) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.id .factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:175) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:173) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build (EntityManagerFactoryBuilderImpl.java:1494) ~[ hibernate-core-5.6.14.Final .jar: 5.6.14.Final ] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.24.jar:5.3.24] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.24.jar:5.3.24] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.24.jar:5.3.24] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.24.jar:5.3.24] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support .AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support .DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support .AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support .AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.context.support .AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) ~[spring-context-5.3.24.jar:5.3.24] at org.springframework.context.support .AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) ~[spring-context-5.3.24.jar:5.3.24] at org.springframework.context.support .AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.24.jar:5.3.24] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.6.jar:2.7.6] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) ~[spring-boot-2.7.6.jar:2.7.6] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.6.jar:2.7.6] at org.springframework.boot.SpringApplication.run (SpringApplication.java:307) ~[spring-boot-2.7.6.jar:2.7.6] at org.springframework.boot.SpringApplication.run (SpringApplication.java:1303) ~[spring-boot-2.7.6.jar:2.7.6] at org.springframework.boot.SpringApplication.run (SpringApplication.java:1292) ~[spring-boot-2.7.6.jar:2.7.6] at com.group .libraryapp.LibraryAppApplication.main(LibraryAppApplication.java:10) ~[main/:na] Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
안녕하세요. 현재 좋아요 부분에서 락에 관련해서 강의를 듣고 있습니다. 궁금한 점은 실무에서는 어떻게 사용을 하시는지 궁금합니다. 왜냐하면 대부분 실무에서는 테이블 자체를 논리적 외래키로 전부 가져가는 경우를 많이 봤었습니다. 외주를 부탁한 외부 업체 또한 낙관적 락을 사용하는 케이스를 봤구요. 강사님께서 일하시는 곳에서는 락의 3가지 케이스를 다양하게 필요에 맞게 사용하는 건가요?!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 영한님 query dsl 환경설정을 마쳤습니다.. clean 과 build 수행가능하고.. 어플리케이션 run을해보면 Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] Database driver: undefined/unknown Database version: 2.3.232 Autocommit mode: undefined/unknown Isolation level: undefined/unknown Minimum pool size: undefined/unknown Maximum pool size: undefined/unknown 로그가나오는데 나머지 로그를 봐서는 문제없어 보이는데 이게 뭔지 궁금합니다 구글링해보니 히카리 설정을 안줬다고 해서 hikari: maximum-pool-size: 10 connection-timeout: 5000 connection-init-sql: SELECT 1 validation-timeout: 2000 minimum-idle: 10 idle-timeout: 600000 max-lifetime: 1800000 이렇게 설정을 줘봤는데 똑같은 로그가 나와서... 궁금해서 질문드립니다.. 이거환경설정 정말 ㅋㅋㅋ 손많이가네용..
[질문 내용] 여기에 질문 내용을 남겨주세요. 처음에 클래스가 로드될 때, 코드를 훑어보며 문자열 리터럴을 사용하면, 미리 문자열 풀에 문자열 리터럴에 대한 인스턴스를 생성하고, 중복이 발견되면 문자열 풀을 살펴보며 중복이 있으니 문자열 풀에 인스터를 생성하지 않는다. 그리고 나중에 로드된 후, 실행될 때는 String 클래스 변수에 문자열 풀에 해당하는 참조값을 주기때문에, 여러 String클래스 변수가 같은 리터럴을 가진다면, 같은 참조값을 가져 ==연산자에서 비교하면 true가 나온다. 맞나요? 클래스가 로드되는 시점에 코드를 훑어보며, 문자열 풀에 "12345"라는 인스턴스가 있다고 가정하고, 나중에 코드가 실행될때 중간에 String str = "123" +" 45";라는 코드가 있으면, 새로운 객체를 만들어 str에 참조값을 넣어주는건가요? 아니면 문자열 풀에 같은 문자열이 있으니까 문자열 풀에 해당하는 인스턴스의 참조값을 주나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 다음으로에서 언급하신 데이터베이스는 업데이트 되어 있나요?
안녕하세요, 저는 "기초 탄탄! 독하게 시작하는 Java - Part 1 : 절차적 프로그래밍" 강의를 수강중인 학생입니다. 제목과 동일하게 "[필수실습 12-3] *출력 놀이 응용 질문" 강의에서 여쭤보고 싶은 내용이 있어서 질문 드립니다. 질문 내용 → 제가 해결을 위해 시도한 절차 역시, 3중 for문처럼 지양해야 할 1순위에 해당하는지 여쭤보고 싶습니다. 내용은, 작업 순서 - 설명 - 코드 순으로 배치했습니다. <작업 순서> // 1번 작업 줄넘김 // 2번 작업 공백 찍기 // 3번 작업 별 찍기 // 조건 == 공백 + 별 == 줄의 개수 for문만 사용해서 풀어야 한다고 생각하고 고민한 결과, 1번 for문 속에서 공백을 출력하는, 1번 for문(별을 찍기 전, 공백을 출력하는 로직) / 별을 출력하는, 2번 for문(기존 삼각형 별 찍기 로직)의 구성으로 해결했습니다. 이 또한, 지양해야 되는 코드인지 궁금합니다. (이 코드는 3중 for문과 유사한 코드인가요) <코드> (for문 부분만 넣었습니다.) // 작업 1번 for (int i = 0; i < 5; i++) { // 작업 2번 + [1번 for문] (공백을 4번 ~ 0번까지 출력하기 위한 for문) for (int k = 4; i < k; k--) { System.out.print("\t"); } // 작업 3번 + [2번 for문] (*을 1번 ~ 5번까지 출력하기 위한 for문) for (int j = 0; j < i + 1; j++) { System.out.print("*\t"); } System.out.print("\n"); } 이상입니다 긴 글 읽어주셔서 감사합니다.
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
31강에서 BookService 클래스에 강의와 똑같이 코드를 작성하였는데 실행하면 UserServiceV2 오류가 발생합니다. UserRepository의 Optional<User> 형식을 받지 못해서 생기는 오류인 것 같은데, 어떻게 수정해야 하나요? error: incompatible types: Optional<User> cannot be converted to User User user = userRepository.findByName(name); ^ UserServiceV2.java @Transactional public void deleteUser(String name) { //SELECT * FROM user WHERE name = ? User user = userRepository.findByName(name); if (user == null) { throw new IllegalArgumentException(); } userRepository.delete(user); } BookService.java @Transactional public void loanBook(BookLoanRequest request){ //1. 책 정보 가져오기 Book book = bookRepository.findByName(request.getBookName()).orElseThrow(IllegalArgumentException::new); //2. 대출 기록 정보 확인하여 대출 중인지 확인 //3. 대출 중이면 예외 발생 if(userLoanHistoryRepository.existsByBookNameAndIsReturn(book.getName(), false)){ throw new IllegalArgumentException("진작 대출되어 있는 책입니다."); } //4. 유저 정보 가져오기 User user = userRepository.findByName(request.getUserName()) .orElseThrow(IllegalArgumentException::new); //5. 유저 정보와 책 정보 기반 UserLoanHistory 저장 userLoanHistoryRepository.save(new UserLoanHistory(user.getId(), book.getName())); } UserRepository.java package com.group.libraryapp.domain.user; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface UserRepository extends JpaRepository<User, Long> { Optional<User> findByName(String name); } 우선 오류를 없애기 위해 UserRepository에서 Optional을 빼고 null처리를 하도록 수정하였는데, 실행 시 오류는 없지만 웹UI로 테스트하면 서버 내부 오류가 발생했다고 뜹니다. 어떻게 수정해야 제대로 처리되는지 모르겠습니다. 추가로 이렇게 수정하였을 때, 이후 코드를 작성할 때 Optional 형식이 아니어서 발생하는 다른 오류가 없는지도 궁금합니다. UserRepository.java package com.group.libraryapp.domain.user; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface UserRepository extends JpaRepository<User, Long> { User findByName(String name); } BookService.java @Transactional public void loanBook(BookLoanRequest request){ //1. 책 정보 가져오기 Book book = bookRepository.findByName(request.getBookName()).orElseThrow(IllegalArgumentException::new); //2. 대출 기록 정보 확인하여 대출 중인지 확인 //3. 대출 중이면 예외 발생 if(userLoanHistoryRepository.existsByBookNameAndIsReturn(book.getName(), false)){ throw new IllegalArgumentException("진작 대출되어 있는 책입니다."); } //4. 유저 정보 가져오기 User user = userRepository.findByName(request.getUserName()); if(user == null){ throw new IllegalArgumentException(); } //5. 유저 정보와 책 정보 기반 UserLoanHistory 저장 userLoanHistoryRepository.save(new UserLoanHistory(user.getId(), book.getName())); } UserServiceV2.java @Transactional public void deleteUser(String name) { //SELECT * FROM user WHERE name = ? User user = userRepository.findByName(name); if (user == null) { throw new IllegalArgumentException(); } userRepository.delete(user); }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) - 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) - 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 아니오 [질문 내용] 여기에 질문 내용을 남겨주세요. 제가 친형걸로 이걸 들으려고 하는데 이 로드맵 전반적인 과정은 스프링인지 스프링부트인지 알고 싶어서 이렇게 질문드립니다.
안녕하세요 이번에 unity 처음 배우고 있는 학생입니다. PlayerPrefs를 한번에 저장하는 것에서 각 Class에서 저장하는 것으로 바꾸었는데 PlayerPrefs가 내부적으로 값이 변경되었는지 여부를 확인하여 저장을 하나요?? 만약 내부적으로 확인하지 않고 계속 저장한다면 오히려 디스크에 무리가 갈 것 같아 질문을 드립니다!
안녕하세요 강사님. 강의 잘 보고 있습니다. 지금 섹션 4. Multiplay 의 몬스터 스폰 영상을 보고 있는데, Spawner 로직과 관련하여 궁금한 점이 있어 글을 남기게 되었습니다. 영상 중에 강사님께서 “상대방의 몬스터는 위쪽에, 자신의 몬스터는 아래쪽에 나오는 것을 볼 수 있다.” 라고 설명해주셨는데요, 제가 직접 클라이언트 쪽 스폰 로직을 수정하여 테스트해본 결과, 호스트와 클라이언트 각각에서 상대방이 요청한 몬스터가 화면의 하단에 표시되는 것으로 확인되었습니다. 물론 제가 아직 섹션 4. Multiplay 의 몬스터 스폰 영상까지만 본 상태이므로, 이후 강사님께서 정정해주셨을 수도 있습니다. 다만 혹시라도 같은 부분에서 궁금증을 가지실 수강생들을 위해, 가능하시다면 이 내용을 한 번 확인해주시면 감사하겠습니다. 제가 잘못 이해한 부분이 있다면 언제든 말씀 부탁드립니다. 항상 좋은 강의 제공해주셔서 감사합니다. 좋은 하루 되세요! [Spawner에서 수정한 부분] [클라이언트에서 본 각각의 몬스터] Client 0 즉, 호스트의 요청으로 스폰된 몬스터가 상대방인 클라이언트의 입장에서 아래쪽에 보이는 모습. Client 1 즉, 클라이언트 자신의 요청으로 인해 스폰된 몬스터가 상단에 위치한 모습 [호스트에서 본 각각의 몬스터]