2023-11-02T18:42:00.239+09:00  INFO 1 --- [nio-8080-exec-9] c.gaemimarble.filter.WebSocketHandler    : className:codesquad.gaemimarble.game.dto.request.GameSellStockRequest@4960b9c0
2023-11-02T18:42:00.240+09:00 ERROR 1 --- [nio-8080-exec-9] w.s.h.ExceptionWebSocketHandlerDecorator : Closing session due to exception for StandardWebSocketSession[id=4d2f5495-b3d2-3262-c636-9a17d699bb26, uri=ws://15.165.165.105:8080/api/games/55/tommy1]

java.util.ConcurrentModificationException: null
        at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1597) ~[na:na]
        at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1620) ~[na:na]
        at codesquad.gaemimarble.game.service.GameService.createUserBoardResponse(GameService.java:256) ~[classes!/:0.0.1-SNAPSHOT]
        at codesquad.gaemimarble.game.service.GameService.sellStock(GameService.java:294) ~[classes!/:0.0.1-SNAPSHOT]
        at codesquad.gaemimarble.game.controller.GameController.sendSellResult(GameController.java:93) ~[classes!/:0.0.1-SNAPSHOT]
        at codesquad.gaemimarble.game.controller.GameController.lambda$new$6(GameController.java:71) ~[classes!/:0.0.1-SNAPSHOT]
        at codesquad.gaemimarble.game.controller.GameController.handleRequest(GameController.java:130) ~[classes!/:0.0.1-SNAPSHOT]
        at codesquad.gaemimarble.filter.WebSocketHandler.handleTextMessage(WebSocketHandler.java:40) ~[classes!/:0.0.1-SNAPSHOT]
        at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
2023-11-02T18:42:25.819+09:00  INFO 1 --- [nio-8080-exec-3] c.gaemimarble.filter.WebSocketHandler    : className:codesquad.gaemimarble.game.dto.request.GameSellStockRequest@7102a98c
2023-11-02T18:42:25.820+09:00 ERROR 1 --- [nio-8080-exec-3] w.s.h.ExceptionWebSocketHandlerDecorator : Closing session due to exception for StandardWebSocketSession[id=1f2a56b4-48a0-4d4b-ea7e-4b1a95f0c08f, uri=ws://15.165.165.105:8080/api/games/55/tommy1]

java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "java.util.Map.get(Object)" is null
        at codesquad.gaemimarble.game.service.GameService.sellStock(GameService.java:280) ~[classes!/:0.0.1-SNAPSHOT]
        at codesquad.gaemimarble.game.controller.GameController.sendSellResult(GameController.java:93) ~[classes!/:0.0.1-SNAPSHOT]
        at codesquad.gaemimarble.game.controller.GameController.lambda$new$6(GameController.java:71) ~[classes!/:0.0.1-SNAPSHOT]
        at codesquad.gaemimarble.game.controller.GameController.handleRequest(GameController.java:130) ~[classes!/:0.0.1-SNAPSHOT]
        at codesquad.gaemimarble.filter.WebSocketHandler.handleTextMessage(WebSocketHandler.java:40) ~[classes!/:0.0.1-SNAPSHOT]
        at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) ~[spring-websocket-6.0.12.jar!/:6.0.12]
        at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) ~[tomcat-embed-websocket-10.1.13.jar!/:na]
        at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.13.jar!/:na]
        at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

→ 컨쿼런트맵으로 변경.. 동시성 해결? 됐을까?