inflearn logo
강의

Course

Instructor

Intermediate/Practical Redis for Non-Majors

[Practice] Solving Database Load Caused by a Surge in Likes with Redis - 2

Request Failed 가 뜹니다.

24

khb3025

1 asked

0

K6 부하 테스트 터미널 창에서

WARN[0000] Request Failed error="Post \"http://localhost:8080/likes/redis\": dial tcp 127.0.0.1:8080: connectex: No connection could be made because the target machine actively refused it."


상기 에러가 계속 나옵니다.


-- 테스트 결과 --

이전 테스트 보다 20배정도 처리속도가 개선된건 확인했으나 실패율이 계속 뜨는건 OS차원의 문제일까요? (OS는 Windows 입니다)

-- Redis 적용 이전 --

image.png

-- Redis 적용 이후 --

부하 테스트 실패.png.webp


redis nosql query-tuning performance-tuning

Answer 2

0

jscode

안녕하세요 ! 질문 잘 해주셨어요~

질문해주신 내용에 대해 답변드려볼게요!

"이전 테스트 보다 20배정도 처리속도가 개선된건 확인했으나 실패율이 계속 뜨는건 OS차원의 문제일까요? (OS는 Windows 입니다)"

-> 추측하신 대로 코드나 Redis 쪽 문제가 아니라 로컬 환경의 한계 때문에 발생하는 현상이 맞아요 ~

connectex: No connection could be made 에러는 서버가 죽어서 나는 게 아니라, 톰캣이 미처 처리하지 못한 연결 대기열이 꽉 차서 OS가 새로 들어오는 연결을 거절할 때 나오는 에러에요 !

가상 유저 1000명이 한 대의 노트북에서 동시에 연결을 맺다보니 부하 생성기(k6)와 서버가 같은 머신의 네트워크 자원을 나눠쓰게 되는데, 윈도우는 동시에 쓸 수 있는 포트 수나 연결 대기열이 맥/리눅스보다 여유가 적은 편이라 이런 에러가 조금 더 자주 보이는 편이에요 ~

그리고 올려주신 테스트 결과를 같이 보시면 더 명확한데요, 실패한 요청 수 자체는 Redis 적용 전이 1046건, 적용 후가 1103건으로 거의 똑같아요 ! 전체 요청 수만 17,619건에서 333,202건으로 늘어나서 실패율이 5.93%에서 0.33%로 떨어진 것이구요~

처리량이 20배 늘었는데도 실패 건수는 그대로라는 건, 애플리케이션 로직이 아니라 로컬 환경이 감당할 수 있는 동시 연결 수의 한계에 걸렸다는 신호로 볼 수 있어요 !

이번 실습의 목적은 Redis 적용 전후의 TPS를 비교해보는 것이기 때문에, 이 에러는 무시하고 그대로 진행하셔도 괜찮아요 ~

그래도 신경쓰이신다면 스크립트의 vus 값을 300~500 정도로 낮춰서 한 번 돌려보세요 !

실패율이 0에 가깝게 나오면서도 Redis 적용 전후의 성능 차이는 똑같이 확인하실 수 있을 거예요 :)

추가로 궁금하신 점 있으시면 언제든 편하게 추가질문 남겨주세요 ~~

1

khb3025

선생님의 속 시원한 설명 감사드립니다. 에러의 원인이 궁금하기도 했고, 아무래도 이후에 포트폴리오 프로젝트에 부하테스트 발생을 본체에서 할지 EC2 를 생성해서 할지 고민이었는데 어떤 환경에서 테스트 할지 가닥을 잡을수 있게 되었습니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. khb3025님.

해당 오류는 OS 문제라기보다, K6가 요청을 보내는 localhost:8080 주소에서 서버가 연결을 받지 못해 발생하는 Connection Refused 오류로 보입니다.

특히 다음 사항을 확인해 보세요.

  • Spring Boot 애플리케이션이 실제로 8080 포트에서 실행 중인지 확인
  • 브라우저나 curl http://localhost:8080/likes/redis로 API가 정상 호출되는지 확인
  • K6를 Docker 컨테이너에서 실행 중이라면, 컨테이너 내부의 localhost는 호스트 PC가 아니라 K6 컨테이너 자신을 의미함
  • Docker 환경에서는 localhost 대신 호스트 주소 또는 서버 컨테이너 이름을 사용해야 할 수 있음
    • Windows Docker Desktop: host.docker.internal:8080
    • 동일한 Docker Compose 네트워크: http://서비스명:8080
  • API 서버가 실행된 뒤 K6 테스트를 시작했는지도 확인

따라서 Windows 자체의 문제라기보다는, K6가 요청하는 주소와 실제 애플리케이션이 실행 중인 위치가 일치하지 않을 가능성이 높습니다. 또한 Redis 적용 후 처리량이 크게 개선되었더라도, 일부 요청이 실패하면 K6의 실패율은 계속 표시될 수 있으므로 실패 요청의 에러 메시지와 대상 URL을 함께 확인해야 합니다.

관련된 기존 답변을 참고해 주세요.

  • request failed 관련하여 질문 드립니다.
    K6 부하 테스트 중 Request Failed와 타임아웃이 발생한 사례로, 부하 테스트 실행 환경과 요청을 보내는 컴퓨터의 네트워크·운영체제 환경을 점검하는 방법을 안내하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

부하 테스트 시 설정 관련 질문드립니다

1

14

1

섹션 2

0

9

1

pub/sub의 연결 객체에 대해 질문 드립니다.

0

12

2

build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)

0

16

1

수강 완료한 강의 수료증 어떻게 받나요?

0

21

1

ArticleReadService 관련 질문

0

27

1

kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.

1

67

1

domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다

1

47

1

Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면

1

76

2

스크립트에 대해 질문 있습니다.

1

59

1

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

2

71

1

조건 검색 질문

0

40

1

p.created_at vs u.name 인덱스 문의

0

48

2

비관적 락과 낙관적 락에서 임계 영역 질문 있습니다.

0

44

2

댓글 삭제 로직에서 동시성 문제 발생 가능성

0

39

1

재고 감소와 쿠폰 발급은 왜 서로 다른 방식으로 동시성을 제어하나요?

0

56

2

(해결완료)EC2 이중화를 해도 기존 EC2 CPU 사용률이 높은 문제

0

58

2

AWS 배포 성능테스트

0

75

2

[실습] WHERE문이 사용된 SQL문 튜닝하기 - 2

0

65

2

JWT토큰 발급 시, subject 값을 다양하게 넣어서 여러 개의 토큰을 만드는 이유

0

55

2

[실습] 인덱스 직접 설정해보기/성능 측정해보기

0

65

2

인기 게시판 목록(Sorted set)

0

76

2

테스트 코드 작성 시 DTO 새로 작성하는 이유가 궁금합니다.

0

71

1

mysql 의 bitmap

0

71

1