spring
-
Jmeter 성능테스트를 통한 Thread pool 및 webclient의 동기적처리 사용 여부 결정spring 2024. 2. 16. 16:07
서론 테스트 설계전 오류 발생과 해결 과정 서비스 흐름 1. 클라이언트로부터 캐릭터 닉네임, 날짜 데이터를 입력 받는다. 2. 컨트롤러에서 서비스 클래스의 메서드를 실행시킨다. 3. 서비스 클래스의 메서드에서 maplestory openapi 호출을 하여 닉네임을 입력하고 고유 키를 전달 받는다. 고려한 사항. 1. 서비스 코드에는 RateLimiter 설정이 되어있고, 분당 300건의 호출 제한을 가진다. - 이유: maplestory openapi의 초당 호출 제한이 5건/초 이지만 메서드에서 필터를 통해 모든 호출을 바로 보내지 않기 때문에 적정 수준으로 설정. 2. 서비스 코드에서 webclient를 사용하여 비동기 방식으로 사용한다. - 이유: 먼저 RestTemplate을 사용하였으나 spri..
-
JMeter를 사용한 API호출 부하 테스트 에러 수정 -2spring 2024. 2. 8. 12:07
도입 OpenApI 를 사용하는데 있어서 5건/초 , 1,000건/일 제한이 문제가 되었다. (개발단계 제한) Jmeter를 통해 부하테스트를 하는 도중 쓰레드 수를 늘리거나 루프 카운트를 늘릴 경우 오류가 생겼다. 이를 위해 RateLimiter를 사용해 보았지만 이는 단일 쓰레드에 적용되는 방식이기 때문에 효과를 보지 못하였다. 이를 위해 쓰레드 풀 적용과 CompletableFuture를 사용하였다. 개념 우선 자바에서는 스레드를 운영체제의 자원으로 사용한다. 따라서 스레드가 계속해서 생성된다면 운영 체제의 자원이 빨리 소진되게 된다. 즉, 동시 접속자가 많아질 경우 스레드가 무한히 생성되며 서버가 다운될 수 있다는 것이다. 바로 이러한 문제를 방지하기 위해서 사용 스레드의 개수를 관리하는 방법이 ..
-
JMeter를 사용한 API호출 부하 테스트 에러 수정 -1spring 2024. 2. 5. 17:46
도입 OpenAPI 호출을 이용한 프로젝트를 만들며 서버 부하 테스트를 적용해 보고자 하였다. 서버 부하 테스트를 위한 프로그램으로 JMeter를 사용하기로 하였다. 서버 부하 테스트 실행 이유 내가 생각한 서버 부하 테스트를 하는 이유는 다음과 같다. 개발단계에서 고려해야 할 요인에는 여러가지가 있는데, 그 중에서 실제 배포 환경에 대한 고민이 필요하다 느꼈다. 혼자서 개발할 때는 호출 건수도 적고 한정적이기 때문에 대부분 안정적인 결과가 나온다. 하지만 실제 배포를 하게 된다면 예측할 수 없었던 수많은 호출과 에러가 생기는 것이 당연하다. 서버 부하 테스트는 실제 배포 환경에서 일어날 여러 변수들을 미리 겪어보고 성능을 최적화 하기 위해 실행하게 되었다. 설치 및 실행 mac 사용 환경에서 HomeB..
-
[Spring] application.properties/.yml 파일 database 연결 설정 에러spring 2024. 2. 2. 09:37
문제 상황. Spring에서 빌드를 하고 실행을 했을 때 아래와 같은 에러 메시지가 나오는 경우가 있다. Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class 원인. 이는 application.properties 혹은 application.yml 파일의 database 관련 설정이 없기 때문에 발생하는 에러일 가능성이 크다. 해결 방법. 내가 진행중인 프로젝트는 우선 database를 사용하지 않기로 결정했기 때문에 따로 database 관..
-
[Spring] Maplestory openAPI적용 오류 및 해결과정spring 2024. 2. 1. 17:00
도입 2023년 12월 부터 Nexon사의 콘텐츠에 대한 data가 API형태로 받아볼 수 있게 되었다. 그 중에서 mapleStory의 API를 이용하여 개발을 하고자 하였다. Spring을 기반으로 하여 개발을 진행하였다. 본문 API를 이용하기 위해서 https://openapi.nexon.com/ 사이트에 로그인하여 애플리케이션 등록을 한 후 API KEY를 발급 받아야한다. API KEY만 있으면 호출이 가능한 상태가 된다. 예시로 GET /maplestory/v1/id 라는 캐릭터 식별자(ocid) 조회 api가 있다. 이는 캐릭터 식별자(ocid)를 조회해주는 api다. 모든 api 호출에는 Header에 x-nxopen-api-key 라는 이름의 key에 발급 받은 API KEY 값이 들어..
-
PostMan 400에러 badRequest error 발생과 해결과정 (Mysql 예약어 오류)spring 2024. 1. 30. 14:43
상황 SpringBoot CRUD 작업을 테스트 하는 과정에서 PostMapping 요청에 대한 PostMan 호출 결과가 400error badRequest가 나왔다. 400에러는 해당 요청이 잘못되었을 때 보내는 상태 코드이다. 주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드이다. ex) 전화번호를 보내야 하는데 숫자가 아닌 문자열의 주소가 대신 Body에 담겼을 경우 등 원인 분석 우선 Header에 Content-Type이 application/json으로 되어있는지 확인해 볼 필요가 있었고 문제가 없었다. intelij의 error로그를 보면 2024-01-30 12:02:20.248 WARN 1812 --- [nio-8080-exec-1] .w.s.m.s.DefaultHand..
-
Spring InteliJ maven을 gradle로 바꾸는 방법(for mac)spring 2023. 7. 13. 16:26
도입 이글에선 맥북 사용자 기준 InteliJ에서 maven을 gradle로 바꾸는 과정을 보일 것이다. spring을 처음 접할 때 배운 것이 maven이기 때문에 계속 사용했었지만 찾아볼 수록 Gradle이 더 나은 방식이란 것을 알게 되었다. 왜 Gradle인가? 비교해보기 Maven의 경우 특정 플러그인이 설정이 다를 때 설정을 분리해서 중복기술 할 때가 있다. 이때 불필요한 설정이 길어지고 중복되어 가독성이 떨어지게 된다. 이는 곧 유지 보수성이 떨어짐을 의미한다. Gradle의 경우 아래와 같은 장점이 있다. 1. Groovy언어를 이용하여 코드로서의 설정정보를 구성하기 때문에 구조적이다. 2. xml의 구조적인 틀을 벗어나 코딩에 의한 간결한 정의가 가능하다. 3. 설정주입방식으로 정의하기 ..