본문 바로가기

개발일지

(102)
[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의 경우 짧은 간격으..
[230807] Java Security AutoConfigure가 될 때 Https Port 매핑 Security AutoConfigure시 Https Port 이슈 ✔ 이슈 💢 Java Spring Boot를 통해서 기본 구조만 갖추고 https를 적용해 봤다. 그런데 http일 때는 브라우저를 통해 서버에 정상적으로 접근이 가능했는데 https를 적용하니 접근이 안 되는 문제가 발생했다. ✔ 원인 분석 💬 브라우저에서 요청 시 https://domain:8080이 https://domain:8443으로 리다이렉트 되는 것을 발견했다. Port 리다이렉트 되는 것을 중심으로 원인을 알아보기로 했다. 💬 찾아본 결과 Security AutoConfigure를 사용할 시 https에 매핑된 포트로 변경이 된다는 것을 알게 되었다. 80 포트의 경우 443으로 매핑이 되고 8080 포트의 경우 8443으..