[2024.08.08 TIL] 내일배움캠프 81일차 (최종 팀프로젝트, JMeter로 동시성 테스트하기)

My_Code·2024년 8월 8일
0

TIL

목록 보기
96/113
post-thumbnail

본 내용은 내일배움캠프에서 활동한 내용을 기록한 글입니다.


💻 TIL(Today I Learned)

📌 Today I Done

✏️ JMeter로 동시성 테스트하기

  • JMeter를 이용해서 티켓 예매 시 동시에 여러 사람이 접근할 때 정상적인 결과가 나오는지 확인하기 위해서 동시성 테스트를 진행함

  • 티켓 예매를 Redis를 큐로 활용하는 BullMQ를 구현했음

  • 제대로 큐에서 순차적으로 진행하는지 확인할 필요가 있기에 JMeter로 테스트 진행

  • 진행 과정

    1. 10명의 사용자 회원가입 시키기
    2. 10명의 사용자 로그인 시키기
    3. 10명의 사용자의 토큰 저장하기
    4. 10명의 사용자가 1초 동안 동시에 하나의 공연을 예매
    5. 이 때 공연의 잔여 좌석은 3자리로 제한
    6. 결과적으로 3명의 사용자만 예매가 가능해야 함
  • 기본 테스트 계획 설정

    • JMeter 실행: JMeter를 실행
    • 테스트 계획 생성: 왼쪽 패널에서 오른쪽 클릭하여 Add > Threads (Users) > Thread Group을 추가
  • Thread Group 설정

    • Number of Threads (Users): 10으로 설정
    • Ramp-Up Period: 10초로 설정하여 10명의 사용자가 동시에 시작되도록 함
    • Loop Count: 1로 설정
  • 회원가입 요청 추가

    • 회원가입 HTTP Request Sampler 추가:
      • Thread Group을 오른쪽 클릭하고 Add > Sampler > HTTP Request를 선택
      • 회원가입 요청 설정:
        • Name: Sign-Up Request
        • Server Name or IP: API 서버 주소 (예: api.example.com)
        • Path: 회원가입 API의 엔드포인트 (예: /register)
        • Method: POST
        • Body Data: 회원가입에 필요한 사용자 정보를 JSON 형식으로 아래와 같이 입력
        • ${__counter(FALSE)} : 사용자의 수에 따라 증가하는 번호를 생성할 때 사용
        • ${__counter(TRUE)} : 각 스레드 그룹이 시작할 때 카운터가 초기화, 사용자에 대해 고유한 값을 생성할 때 사용
{
	"email": "test${__counter(TRUE)}@test.com",
	"password": "Test1234!",
	"passwordCheck": "Test1234!",
	"nickname": "test"
}

  • HTTP 헤더 설정
    • Sign-Up Request을 오른쪽 클릭하고 Add > Config Element > HTTP Header Manager 선택
    • 이 과정에서 HTTP 요청을 보낼 때 사용되는 헤더를 관리할 수 있음
    • 회원가입 시 HTTP 요청을 보낼 때 JSON 타입으로 전송한다고 헤더에 작성될 필요가 있음
    • 그렇기에 아래와 같이 내용을 추가함

  • 로그인 요청 추가
    • 로그인 HTTP Request Sampler 추가:
      • Thread Group을 오른쪽 클릭하고 Add > Sampler > HTTP Request를 선택
      • 로그인 요청 설정:
        • Name: Sign-In Request
        • Server Name or IP: API 서버 주소 (예: api.example.com)
        • Path: 로그인 API의 엔드포인트 (예: /login)
        • Method: POST
        • Body Data: 로그인에 필요한 사용자 정보를 JSON 형식으로 아래와 같이 입력
{
	"email": "test${__counter(FALSE)}@test.com",
	"password": "Test1234!"
}

  • JSON 응답에서 토큰 추출:
    • 로그인 요청 아래에 Add > Post Processors > JSON Extractor를 추가
    • Name: JSON Extractor
    • JSON Path Expressions: 토큰의 위치를 지정 (예: $.accessToken)
    • Names of created variables: access_tokne으로 설정
    • 나중에 Access 토큰이 필요한 곳에서 access_token이라는 변수명으로 토큰 사용 가능

  • 예매 요청 추가
    • 예매 HTTP Request Sampler 추가:
      • Thread Group을 오른쪽 클릭하고 Add > Sampler > HTTP Request를 선택
      • 예매 요청 설정:
        • Name: Booking Request
        • Server Name or IP: API 서버 주소 (예: api.example.com)
        • Path: 공연 예매 API의 엔드포인트 (예: /book)
        • Method: POST
        • Body Data: 예매에 필요한 정보를 JSON 형식으로 아래와 같이 입력
{
	"scheduleId": 41
}

  • Path Parameter 설정
    • Path Parameter:
      • showId 값을 변수로 설정하려면, Thread Group이나 상위 요소에 User Defined Variables를 추가하고, showId 값을 정의
      • Thread Group을 마우스 오른쪽 버튼으로 클릭하고, Add -> Config Element -> User - Defined Variables를 선택
      • User Defined Variables에서 showId라는 이름의 변수를 추가하고, 원하는 값으로 설정

  • 헤더에 토큰 추가:
    • Booking Request 아래에 Add > Config Element > HTTP Header Manager를 추가
    • Name: Authorization
    • Value: Bearer ${access_token}으로 설정
    • access_token은 로그인쪽 JSON Extractor를 설정하면서 HTTP 요청의 반환값에서 accessToken을 꺼내서 access_token이라는 변수에 저장했기에 아래처럼 사용함

  • 결과 확인을 위한 Listener 추가
    • View Results Tree 추가:
      • Thread Group을 마우스 오른쪽 버튼으로 클릭
      • Add -> Listener -> View Results Tree를 선택


📌 Tomorrow's Goal

✏️ MVP 중간 발표

  • 내일은 최종 프로젝트 MVP 중간 발표를 진행하는 날

  • 오전에 발표 리허설을 진행하고 PPT와 스크립트를 수정, 보완할 예정

  • 발표 이후에는 MVP이후에 할 일을 정리할 예정


✏️ MVP이후 할 일 정리하기

  • 사실 중간 발표 때까지 제대로 돌아가도록 만들 수 있을까 계속 불안함

  • 할 것은 많은 것 같은데 뭐부터 해야할지 머리 속에서 정리가 되지 않음

  • MVP, 중간 발표 이후에는 어떤 것을 구체화하고 구현할지 간단하게 정리할 예정

  • 아무래도 팀 프로젝트라서 다른 팀원들의 코드 하나하나를 다 읽고 이해할 시간이 없다보니 결과적으로 원하는대로 잘 동작하는지로 그 기능들을 이해해야 할 것 같음



📌 Today's Goal I Done

✔️ 프로젝트 마무리 진행

  • 오늘은 프로젝트 마무리를 위해 여러 가지 테스트를 진행함

  • 우선 프론트엔드와 백엔드의 연결을 확인하고 프론트엔드에서 잘 동작하는지 테스트 함

  • 이후 정말로 BullMQ가 동시성 처리를 제대로 진행하고 있는지 확인할 필요가 있었음

  • 그래서 JMeter로 동시성 처리 테스트를 진행함

  • 생각보다 다양한 테스트를 진행할 수 있어서 추후에는 스트레스 테스트도 진행할 예정


profile
조금씩 정리하자!!!

0개의 댓글