![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnkTeF%2FbtsFGliHD3Y%2F841M6k66krSJ9VEXDClqHK%2Fimg.png)
[최종프로젝트] 실시간 채팅 아키텍처 개선 STOMP+Kafka+MongoDB
데이터 처리 과정 1. 사용자가 Stomp 커넥션 요청 2. 사용자가 Kafka 특정 토픽에 메세지를 발행 3. 해당 메세지를 MongoDB에 저장 4. Kafka를 통해 특정 토픽을 구독중인 모든 서버(2개 이상)에 있는 사용자에게 해당 메세지 전송
데이터 처리 과정 1. 사용자가 Stomp 커넥션 요청 2. 사용자가 Kafka 특정 토픽에 메세지를 발행 3. 해당 메세지를 MongoDB에 저장 4. Kafka를 통해 특정 토픽을 구독중인 모든 서버(2개 이상)에 있는 사용자에게 해당 메세지 전송
개요 프로젝트 통합테스트로 상품 구매에 대한 테스트를 진행하던 중 멀티스레드 환경에서 상품 구매 기능에 접근할 시 레이스 컨디션이 발생하는 문제를 인지할 수 있었다. 이러한 이유로 상품 구매 기능에 동시성 제어가 필요할 것이라고 생각했고 동시성 제어에 필요한 기술의 의사결정, 기술 적용, 테스트 코드 작성 및 회고를 진행하고자 한다. 동시성 처리가 필요한 이유 동시성 처리가 필요한 이유는 레이스 컨디션 발생에 있다. 레이스 컨디션이란 같은 자원(레지스터, 메서드)에 다수의 스레드가 동시에 접근해 값을 조작할때, 조작 순서가 보장되지 않아 잘못된 값이 저장되는 문제를 말한다. 레이스 컨디션의 가장 많이 알려진 예는 아래 코드라고 생각한다. 두 스레드가 동시에 count의 값을 증가시키려고 접근할때 coun..
상품 검색 API Version 1 (성능 개선 이전) 상품 검색 API Version 2 (성능 개선 이후) Test 1 t2.medium: amazon linux 2023 ami / 2vCPU / 4 GiB memory 10 users 30m duration Test 2 t2.medium: amazon linux 2023 ami / 2vCPU / 4 GiB memory 99 users 30m duration Test 3 t2.medium: amazon linux 2023 ami / 2vCPU / 4 GiB memory 1000 users 30m duration
최종프로젝트 테스트 시나리오 참고사항 nGrinder Controller/Agnet 실행 환경 - 로컬 환경에 설치해서 EC2 서버에 요청을 보내는 방식으로 테스트 - nGrinder Controller/Agent를 실행하는 비용도 존재하기 때문에 서버와 동일한 환경에 설치해서 진행하는것은 바람직하지 않고, 서버 환경에 대한 스펙은 명시하되 Controller/Agent가 실행되는 환경의 스펙은 명시하지 않아도 무관하다. 서버 스펙에 대한 참고사항 - t2.micro: amazon linux 2023 ami / 1 vCPU / 1 GiB memory - 위 서버 스펙은 aws freetier 스펙인데 실무에서는 4vCPU, 16GiB 환경을 주로 쓴다고 한다. 본 프로젝트는 학습의 목적이 크기 때문에 낮..
상품 검색 기능 성능 문제 발견 및 테스트 최종프로젝트에서 상품 검색 기능을 구현하고 프로젝트를 배포했을때, 아래와 같이 조회 속도가 매우 느린 문제가 발생했다. 이를 해결하고자 먼저 포스트맨을 이용해 응답시간을 체크해보았다. 포스트맨으로 확인해보았을때 5000~6000ms의 비정상적인 응답시간을 반환하는것을 확인할 수 있었다. 클라이언트의 입장에서 2000ms가 넘어가면 서비스를 제공하기 어렵다는 점을 기준으로 봤을때 확실히 개선히 필요한 부분이었다. nGrinder로 부하테스트를 진행했는데 TPS는 1.2, MTT는 8000ms로 매우 비정상적인 매트릭을 확인할 수 있었다. 반면, 메모리나 CPU가 매우 안정적인 모습을 보여주고 있는데 이를 확인했을때 서버 외부의 문제일 가능성이 크다고 예측했다. 상..
개요 최종프로젝트는 스포츠 경기 일정 및 결과를 제공하는 서비스인데 게임별 사용자가 소통할 수 있는 실시간 채팅 기능을 제공하고자 하였다. 네이버 스포츠, 아프리카TV 등과 같은 플랫폼에서 제공하는 실시간 채팅 기능을 모티브로하여 개발하였고 그 과정에서의 기술 의사결정과 개발과정 및 느낀점에 대한 회고를 진행하고자한다. Polling vs WebSocket 개발전 실시간 채팅에 사용할 수 있는 기술로 Polling 방식, WebSocket 중 어떤 기술을 채택해야할지 고민하는 시간을 가졌다. 결과적으로 WebSocket으로 개발하였고 WebSocket을 채택한 이유는 아래와 같다. 첫 번째로, Polling 방식은 지정한 interval마다 http요청을 보내기 때문에 서버에 많은 부담을 줄 것으로 판..
심화프로젝트 팀과제 "Trello" 만들기 KPT 회고 https://github.com/SpartaTrelloA08/SpartaTrelloA08Backend GitHub - SpartaTrelloA08/SpartaTrelloA08Backend: SpartaTrelloA08Backend SpartaTrelloA08Backend. Contribute to SpartaTrelloA08/SpartaTrelloA08Backend development by creating an account on GitHub. github.com KEEP 협업시에 정형화된 PR양식과 코드리뷰를 활용하니 누가 어떤 기능을 개발했는지와 전체적인 프로젝트 진행 흐름을 파악할 수 있어 좋았습니다. Postman을 사용하지않고 Servi..
목표 5주차 개인과제로 익명 게시판의 API서버를 개발하는 과제를 받았다. 과제를 제출하고 멘토님께서 앞으로 유지해야할 부분과 개선해야할 부분에 대한 몇 가지 피드백을 주셨고, 과제 코드를 리팩토링한 코드와 과제를 수행하며 느낀점을 회고하고자 글을 작성한다. GitHub - zzzzseong/sparta_todo_app_backend: 내일배움캠프 Spring 3기 5주차 개인과제 스파르타 익명 게시판 내일배움캠프 Spring 3기 5주차 개인과제 스파르타 익명 게시판 서버. Contribute to zzzzseong/sparta_todo_app_backend development by creating an account on GitHub. github.com 과제 피드백 1️⃣ 전체적인 코드가 매우..
목표 오늘은 알고리즘 스터디와 개인적으로 문제를 풀어보면서 나의 알고리즘 풀이 실력이 많이 모자라다는 것을 느꼈다. 하지만, 알고리즘 문제는 풀면 풀수록 실력이 늘어난다고 하기 때문에 꾸준히, 성실하게 풀다 보면 성장해 있을 것이라고 생각한다. 오늘 푼 문제를 회고하면서 관련 실수를 다시 하지 말자. Programmers Lv. 1 햄버거 https://school.programmers.co.kr/learn/courses/30/lessons/133502 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 개요 해당 문제는 1(빵), 2(야채), 3(고..