한 달 전 · 원승현 님의 질문
웹소켓 + Stomp로 채팅 기능을 구현하며
RabbitMQ를 도입하였습니다. 도입의 이유는 스프링 내장 메시지 브로커를 이용하게 되면 인메모리 기반의 동작 방식으로 인해 서버 문제 발생 시 메시지가 유실되거나 확장에도 제한이 있다고 판단하여 도입하였습니다. 현직자 분들이 보기에 이 이유가 적합한 근거가 될까요? 추가로 JMeter로 RabbitMQ를 사용했을 때와 사용하지 않았을 때의 성능을 비교했는데 사용자 100명 기준 성능도 사용하지 않았을 때가 우세했고, RabbitMQ를 사용했을 때는 오히려 아래와 같은 오류가 가끔 발생하며 메시지또한 약 90퍼센트 정도만 저장된걸 확인할 수 있었습니다. 무엇이 문제이며 해결 방안이 있을까요?? java.net.SocketException: Connection reset at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:394) ~[na:na] at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:426) ~[na:na] at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) ~[netty-buffer-4.1.114.Final.jar:4.1.114.Final] at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) ~[netty-buffer-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.114.Final.jar:4.1.114.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.114.Final.jar:4.1.114.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.114.Final.jar:4.1.114.Final] at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na]
개발자
#채팅
#구현
답변 0
댓글 0
조회 52
6달 전 · 이름 님의 질문
동시성+데드락 제어를 위한 비관적 락 잠금 질문
안녕하세요 글쓰기 커뮤니티 프로젝트를 개발하는 중입니다 회원이 소설을 찜하는 기능(좋아요)을 구현 중에 있는데요 찜 객체는 아래 첨부한 코드와 같이 memberId와 novelId를 외래키로 갖습니다 동시성 이슈를 다뤄보고자 500명의 사용자가 동시에 novelId가 1인 소설을 찜하는 요청을 보낸다는 가정 하에 jmeter로 테스트를 돌려보니 동시성 이슈가 아니라 데드락 문제가 발생해서요 favoriteJDBCRepository.save(memberId, novelId); 시 novelId가 외래키라 외래키 정합성 검사 때문에 db 내부적으로 novelId가 1인 레코드에 read lock이 걸리는 것 같습니다 favorite 객체 save 시 트랜잭션 A가 novelId가 1인 레코드에 대해 read lock을 얻고, novelId가 3인 novel의 favoriteCount(찜 개수)를 +1하고자 write lock 요청 -> favorite 객체 save 시 다른 트랜잭션 B도 novelId가 1인 레코드에 대해 readlock을 얻고, novelId가 1인 novel의 favoriteCount(찜 개수)를 +1하고자 write lock 요청 -> write lock은 read lock이 전부 해제되어야 얻을 수 있음. 트랜잭션 A는 B가 read lock을 release하기를 대기하고 B도 A가 read lock을 release하기를 대기하면서 데드락 발생 일단 novelId로 novel을 비관적 락을 사용해 조회해서 favorite 객체를 생성한 뒤에 저장하는 방식으로 데드락+동시성 이슈 둘 다 해결이 되는데요(chooseFavoriteV2) 이 방법 말고도 더 좋은 대안은 없을까요??
개발자
#비관적락
#데드락
#동시성
#데이터베이스
#백엔드
답변 0
댓글 0
추천해요 1
조회 44
일 년 전 · 김연호 님의 답변 업데이트
JMeter Websocket테스트 질문드립니다
JMeter로 Websocket 테스트를 구현해야 하는 상황인데 테스트 진행하는 도중 아래 에러가 나서 찾아보니 Single Write Sampler에 Data 인코딩 문제로 추측만 되고 있습니다... Failed to parse TextMessage payload=[SEND desti..], byteCount=242, last=true] in session ujvhyrid. Sending STOMP ERROR to client. org.springframework.messaging.simp.stomp.StompConversionException: Frame must be terminated with a null octet JMeter Sampler 인코딩 UTF-8로 설정하는건 찾아서 해봤는데 그래도 안되네요...ㅠㅠ 정말로 인코딩 문제인지 혹시 동일한 경험이 있으신 분이 계실까요? 구글링을 해도 자료를 못찾겠고.. 사내에 해당 지식을 가지신 분도 전무하셔서 너무 답답해서 질문남겨봅니다....
개발자
#jmeter
#websoket
답변 1
댓글 0
조회 256
일 년 전 · 포크코딩 님의 새로운 답변
Jmeter 동시성 테스트 관련 질문입니다.
컴퓨터 1대로 Jmeter와 로컬 환경에서 서버를 띄우고 주문 -> 결제 -> 재고량 감소 API 테스트를 하려고 하는데 궁금한 점이 있어 질문드립니다. (간단한 사이드 프로젝트 수준 입니다.) 기술 스택 : Java, Spring Boot, JPA, MySQL, OpenFeign 사용자 10000명이 동시에 주문 또는 결제하는 테스트 시나리오에 대한 결과를 보고 싶은데 컴퓨터 성능의 이슈로 Dead-Lock이 발생합니다. 쓰레드 수를 늘려가며 에러율을 모니터링 한 결과 최대 500개까지는 Dead-Lock이 발생하지 않습니다. 동시에 10000개의 쓰레드를 감당하려면 어떤 부분을 고려해야 할까요? 스펙상 불가능하다면 10000명의 동시성 테스트를 대체하기 위해 어떻게 테스트 시나리오를 다시 짜야될까요? Jmeter의 Number Of Threads, Ramp - up period, loop - count를 어떻게 조정해야 할까요? 도와주시면 감사하겠습니다 ㅜ
개발자
#java
#spring
#mysql
#jpa
답변 1
댓글 0
추천해요 1
조회 193
2년 전 · 손정현 님의 답변 업데이트
트래픽 성능 지표를 이해하는 방법
제목 그대로 입니다. 사수님이 서버에 부하 테스트, 스트레스 테스트 하면서 서버가 언제 죽는지? 기록하라는 숙제를 내주셨는데요. 어떤 것들을 성능 지표로 놓고 봐야할지 모르겠습니다. 사수님은 추상적으로 "대충 사용자가 느낄만한 응답속도가 어느정도 되는지랑 동시 요청 몇개 쯤에서 뻗는지 알아봐주세요~" 라고 하셨는데 이게 단순히 초당 요청수 처리와 지연율만 보면 되는건가요? 처음해보는거라서 질문 남깁니다. 감사합니다. 사용하는 프로그램은 Jmeter 입니다.
개발자
#트래픽
#트래픽-성능-측정
#서버-성능
답변 1
댓글 1
추천해요 3
조회 200
2년 전 · 손정현 님의 답변 업데이트
서버 트래픽 테스트 방법이 궁금합니다
안녕하세요~~ 서버 개발에 대해 공부하다가 궁금한 것이 생겨서 질문 남깁니다. 현업에서 서버가 트래픽을 감당할 수 있는지 테스트를 하시나요? 하신다면 언제 어느 시점에 어디에 하는게 좋은건지 궁금합니다. Jmeter나 artillery 등에 대해서 알고있고 써본적도 있지만, 특정 상황이 닥쳤을때만 써봐서 실제로 현업에서는 이걸 어느 서버에 어느 시점에 트래픽 부하 테스트를 하는지 문득 궁금하더라구요. 예를 들면, - 배포 파이프라인 스크립트에서 테스트를 해보고 배포를 하는건지 (자동화를 하는건지) - 프로덕션에서도 돌려보는건지, 아니면 개발 서버나 스테이징 서버에서만 돌려보는건지 - 모든 서비스에 대해서 하는건지, 아니면 게이트웨이 성격의 서버에만 하는건지 등이 궁금합니다 ㅎㅎ 최근에 서버 개발에 대해서 공부하다보니 다른 곳들은 트래픽 테스트를 하는지, 한다면 어떻게 하고 있는지 궁금하네요. 긴 글 읽어주셔서 감사합니다.
개발자
#트래픽
#서버-트래픽
#대규모-트래픽
#테스트
답변 1
댓글 1
추천해요 5
조회 263