본문 바로가기

분류 전체보기

(166)
[230814] 성능 테스트 어떻게 진행할것인가? 성능 테스트 진행 방식 💬 성능 테스트를 할 수 있는 방법이 여러 가지 있지만, 프로젝트에 적용할 수 있는 것은 성능, 부하 테스트라고 판단했다. ✔ 성능테스트 💬 성능 테스트는 소프트웨어의 애플리케이션의 속도, 응답 시간, 안정성, 확장성 및 리소스 사용량을 테스트하는 데 사용됩니다. 주목적은 애플리케이션의 성능상 문제가 되는 곳을 확인하고 향상하는 것입니다. ✔ 성능테스트 기준 - 트래픽 💬 일반적인 트래픽과 한 순간에 몰리는 트래픽을 구분하기로 했습니다. 일반적인 트래픽은 전체적인 API가 서비스 운영에 있어 성능적인 문제가 없는지 확인하기 위해서입니다.. 한 순간에 몰리는 트래픽은 프로젝트의 주 콘텐츠인 경매이기에 성능을 확인하고 그러한 상황을 대비하기 위해 테스트를 하는 것입니다. 1. 일반적인..
[230813] Jmeter 설치 및 사용해보기 Jmeter 💬 성능 테스를 하기 이전에 Jmeter를 설치를 하고 익숙해지는 시간을 가져보기로 했다. ✔ Jmeter 설치하기 brew install jmeter ✔ Jmeter 실행하기 open /opt/homebrew/bin/Jmeter ✔ Jmeter Plugin Manager 설치하기 1. plugin-manager.jar 설치 ➡ https://jmeter-plugins.org/install/Install/ 2. 설치 파일 bin 폴더 열고 넣기 ➡ open /opt/homebrew/bin ✔ Jmeter Plugin 설치 💬 유용하다는 Plugin 몇 가지 설치 ➡ 3 Basic Graphs ➡ Composite Timeline Graph ➡ jpgc - Standard Set ✔ Jmete..
[ 230813 ] 35주차 회고 일주일 간 진행한 내용 1. 알림 기능 개발 2. 더미 데이터 생성 3. 성능 테스트 툴 선정 알림 기능 개발 [진행] 알림 기능을 위해 실시간 통신에 대해 알아보았다. Polling, SSE(Sever Sent Events), WebSocket에 대해서 알아보고 비교를 했다. 각각의 장단점과 내가 구현할 기능의 특징을 고려하여 SSE을 선택하게 되었다. SSE를 사용해 기능을 구현을 하고 테스트를 했다. 이후에 SSE를 사용하는 기능이 실시간 입찰 조회가 있어서 코드를 합치는 과정에서 문제가 있다는 것을 알았다. 그래서 실시간 입찰 조회 맡은 팀원과 이야기하여 SSE 클래스를 하나 만들어 사용하기로 하며, 문제를 해결할 수 있는 코드를 작성했다. [생각] 공통된 부분의 코드는 사전 협의를 해서 작성을..
[230812] 성능 테스트 툴 선정 성능 테스트 툴 선정 💬 성능 테스트 툴을 정하기 위해 우리에게 필요한 기준을 정했다. ➡ GUI가 제공이 되는가? 이유 : 테스트하는 것이 직관적이고 이해하기 쉽기 때문이다. ➡ 우리가 사용한 프로토콜(HTTP, WebSocket)을 지원하는가? ➡ 간단하게 설정을 할 수 있으며, 러닝 커브는 낮은가? 이유 : 주어진 시간이 많지 않은 상황에서 성능 향상에 많은 시간을 투자하기 위해 빠른 성능 테스트가 필요하다고 판단했다. ➡ 참고할 수 있는 레퍼런스가 많은가? 이유 : 트러블이나 설정 등에 대한 참고할만한 문서가 많다면 문제 발생 시 빠르게 해결할 수 있다. ➡ 비용이 들지 않는가? 이유 : 서버 비용으로 많은 돈이 지출될 것이기 때문에 성능 테스트 도구에 투자할 여유가 없다고 판단했다. ➡ 애플리케..
[230811] Java Faker로 더미 데이터 생성 데이터 생성 방법 고민 💬 MVP 기능을 모두 구현한 이후에 성능 테스트를 진행하기로 했다. 성능 테스트를 위해서 먼저 데이터를 모으기로 했다. 💢 아이디어 경매 데이터를 모으는 것은 어려웠다. 찾아보니 부동산, 법원 경매 등을 데이터 밖에 없었다. 💬 실제 서비스를 하기 위해서 만들어진 프로젝트가 아니라는 점이 다른 관점에서 접근하도록 만들었다. 연관이 없더라도 DB 스키마에 맞추어서 대량의 데이터를 넣어 성능을 테스트 해 볼 수 있겠다고 판단했다. 💢 더미 데이터를 만들어주는 사이트가 있어 사용하려고 했다. 하지만 유료가 아니면 만들 수 있는 건수는 1,000건 밖에 되지 않았다. 그 이상의 데이터가 필요한데 말이다. ✅ 찾아보니 Java로 더미 데이터를 만들 수 있는 Java Faker가 있다는 것..
[230810] 2개 이상의 기능을 1개의 SSE로 처리할 때 문제 SSE 구조 문제 ✔ 문제 1 💢 알림을 보내야 할 주체를 특정하기가 어렵다. ➡ 어떤 유저에게 알림을 보내줄 것인가? ➡ 포스트를 보고 있는 사람을 어떻게 특정할 것인가? ✅ 유저와 포스트를 특정할 수 있도록 ID를 부여하도록 했다. Ssemitter와 묶기 위해 객체를 하나 만들었다. ✔ ID와 Ssemitter가 묶인 클래스 public record CustomSseEmitter ( Long id, SseEmitter sseEmitter ) {} ✔ 문제 2 💢 알림과 실시간 입찰 가격 조회를 하나의 SSE를 사용할 경우 문제가 발생한다는 것을 알았다. ➡ 필요하지 않은 이벤트 전송이 일어난다. [ 경매를 참여하지 않은 클라이언트에게도 이벤트가 날아가는 경우가 생김 ] 💬 유저와 데이터가 많아질수록..
[230809] 알림 기능 구현 알림 기능 구현 기술 선택 💬 알림 기능은 실시간으로 이루어져야 합니다. 서버에서 클라이언트 방향으로만 데이터가 전송이 됩니다. 서버의 부담이 상대적으로 적게 들어가야 합니다. ✅ 실시간을 보장하며, 서버에서 클라이언트로 단반향 데이터 통신을 사용할 수 있는 SSE를 선택하기로 했다. 뿐만 아니라 양방향을 지원하는 WebSocket보다 서버에 주는 부담도 적다. ✔ SSE 기능 구현 💬 알림과 실시간 입찰 가격 조회 기능을 하나의 SSE로 처리하려고 했다. SSE가 별도로 만들어진다면 서버가 부담이 될 수 있다고 판단했기 때문이다. public class SseService { private static final Long DEFAULT_TIMEOUT = 1000 * 60 * 30L; private st..
[230808] Polling, SSE, WebSocket ? 알림 기능 구현 알림 기능을 구현을 하기로 했다. 알림은 이벤트가 벌어질 때마다 실시간으로 유저들에게 보내져야 했다. 실시간 통신이 필요했기에 찾아보고 적용해 보기로 했다. 대표적으로 Polling, WebSocket, SSE 3가지가 있었다. 각자 어떤 특징이 있고 프로젝트에 적합한 방식은 무엇인지 고민하고 결정하기로 했다. Polling ? 💬 실시간 통신을 처리하기 위해 사용되는 방식입니다. HTTP 프로토콜을 사용하여 통신을 하며, Polling과 Long Polling 방식이 있습니다. ✔ Polling 💬 Polling은 일정한 간격으로 클라이언트에서 서버로 요청을 보냅니다. 서버는 요청한 데이터를 응답으로 내려준다. 데이터가 없다면 빈 응답을 내려줍니다. 💢 Polling의 경우 짧은 간격으..