분류 전체보기 76

[Project - Howru] (5) kafka를 활용한 비동기처리 및 성능개선

1. 가설 설정우리 채팅 시스템은 MongoDB + Redis + Kafka를 활용해 메시지를 저장/전달한다.기본 구조에서는 모든 저장 과정을 동기 처리하기 때문에,트래픽이 몰리면 메시지 저장 속도가 느려지고, 응답 시간이 길어진다.비동기 처리와 캐싱 최적화를 도입하면 성능이 개선될 것이라 가정했다.2. 문제 설정동기 처리 기반 메시지 저장 구조에서 성능 문제 발생:p95 응답시간(95% 요청 응답 속도): 약 5초실패율: 약 47% (timeout/drop)TPS(초당 처리 메시지): 50~60 수준으로 제한실제 채팅 서비스라면, 이런 응답 속도와 실패율은 사용자 경험에 치명적임.3. 시나리오 (부하 테스트)도구: k6 + Grafana시뮬레이션:로그인 후 JWT 토큰 발급채팅방 선택 → 메시지 전송 ..

멋사 부트캠프 2025.08.25

[Project - Howru] (4) 채팅 NLP 기반 사용자 추천 시스템 구현

NLP Tagging Service를 별도의 모듈로 구현했습니다.이 서비스는 MSA 아키텍처에서 “사용자 관심사 분석기” 역할을 담당합니다.fastapi-api/ ├── analysisTag.py # NLP 태깅 서비스 메인 코드 ├── Dockerfile # 컨테이너 실행 환경 ├── requirements.txt # 의존성 패키지 └── fastapi-api.iml # IDE 설정 파일왜 MSA로 분리했는가?확장성: NLP 연산은 자원 소모가 크기 때문에 별도의 서비스로 분리하여 독립적으로 확장 가능독립 배포: Dockerfile 기반으로 채팅 서비스, 알림 서비스와 분리해 배포 가능데이터 분리: MongoDB에 독립 컬렉션을 사용유연성: 새로운 태그/키워..

멋사 부트캠프 2025.08.20

[Project - Howru] (3) 채팅 NLP 기반 사용자 추천 시스템 설계

채팅 기반 단어장을 바탕으로 사용자 태그 생성 – NLP 기반 사용자 추천 시스템 설계채팅 기록에서 자동으로 단어장을 생성하고, 이를 주제별 태그로 변환해 사용자 추천까지 이어지는 과정을 설계해본다. 아직 실행은 최종 확정이 아니고, 다양한 접근을 시도한 뒤 최적안을 선택할 계획이다. 1. 채팅 메시지 수집MongoDB에 채팅 메시지를 저장 - kafka를 이용해 redis 캐싱과 비동기로 처리할 예정메시지 필드 예시:{ "_id": { "$oid": "689587cc8e228a315fec3ed6" }, "chatRoomId": "chat_user1_user2", "senderId": "user1", "receiverId": "user2", "message": "Dessert is a m..

멋사 부트캠프 2025.08.17

[Project - Howru] (2) ChatRoom Domain 구현

ChatRoom 도메인 구현채팅이 일어날 수 있는 공간(=채팅방)이 필요하다.그래서 이번 포스트에서는 채팅방 생성 및 관리 도메인인 "ChatRoom" 을 먼저 설계하고 구현해보자. 1. ChatRoom 도메인 요구사항채팅방 생성유저 A가 유저 B에게 채팅 요청을 보낼 수 있다. 요청을 보낸경우 채팅방이 DB에 생성된다.채팅방은 항상 "1:1" 구조다 (추후 그룹채팅방으로 확장 가능하도록 Enum으로 구분)B가 수락해야 채팅방이 활성화된다WebSocket 연결용으로 "UUID 기반 방 식별자"가 필요하다사용자가 방과 연결 해제하면 해당 사용자의 ChatRoomMember 레코드를 삭제한다채팅메시지 저장영속/캐시 이중화 전략을 사용하여, 채팅 메시지를 Redis에 최대 30개 저장(추후에 TTL 설정으로 ..

멋사 부트캠프 2025.08.11

[Project - Howru] (1) 프로젝트 기획

프로젝트 목표/의도요즘 많은 사람들이 영어를 배우지만, 막상 실전에서 말할 기회는 부족하다. 기존 영어 학습같은 경우에는 정적인 단어, 문장의 학습에만 치중되어 있고 실제 회화를 차용에서 학습하기에는 어려움이 있다. 물론 오프라인 영어회화로 그것들을 보충하면 되지만 그 때 학습했던 표현들을 다시 공부하거나 회고하기에는 어려움이 있다. "실시간 대화를 하면서, AI가 자동으로 내 학습 콘텐츠를 정리해준다면 어떨까?"이 질문에서 출발해, 팀원들과 함께 실시간 언어 교환 기반 영어 학습 플랫폼 "하우아유? (How Are You?)"를 기획하게 되었다. 핵심 기능 요약1구글 소셜 로그인Google OAuth를 통한 간편 로그인 (email, provider 저장)2회원가입 옵션 선택모국어 / 학습 언어 / 관..

멋사 부트캠프 2025.08.03

[멋사 부트캠프] 프로젝트 시작

프로젝트 목표/의도MoodBook은 사용자의 감정 상태에 따라 맞춤형 독서 추천을 제공하는 웹 서비스로, 기존의 단순한 책 추천을 넘어 사용자의 감정에 공감하는 책 큐레이션 경험을 제공하고자 기획했다. 프로젝트를 위한 초기 세팅 - 일정공유, 개발 문화처음에 인사를 나눈 후 각자 개인 일정에 대해서 공유를 먼저 했다. 대면으로 만나야 하는 시간이 중요하므로 스케줄링 먼저 진행하였다. 일단 협업을 위해 Github Organization을 공유했다. Github Organization을 기반으로 백엔드와 프론트엔드 각자의 레포지토리를 분리해 관리했다.초기 세팅 단계에서 브랜치 전략, 커밋 컨벤션, PR 리뷰 등 개발 문화에 대한 논의도 진행했다. 개발 환경 세팅MoodBook 프로젝트를 시작할 때 가장..

멋사 부트캠프 2025.07.09

[멋사 부트캠프] Day10 - ThreadLocal

웹 서비스에서는 누군가 웹사이트에 요청을 보내면, 서버는 그 요청을 처리하기 위해 작업 스레드를 하나 배정한다. 그런데 이 서버는 동시에 수많은 요청을 받기 때문에, 여러 스레드가 각기 다른 동시 요청을 처리하고 있다. 이때 각 요청마다 사용자 정보, 고유 ID 같은 데이터를 계속 가지고 다녀야 하는데 그걸 매번 메서드 인자로 전달하는 건 너무 번거롭고 복잡하다. 이럴 때 사용하는 게 바로 ThreadLocal이다. ThreadLocalTraceID란?TraceID는 사용자의 하나의 요청이 시스템을 통과할 때 발생하는 전체 처리 흐름을 유일하게 식별할 수 있는 ID 단위의 기록이다.아래 예시를 보자.Trace ID: abc-123 - 시작 시간: 10:00:00 - 전체 처리 시간: 128ms - 총 5..

멋사 부트캠프 2025.06.30

[멋사 부트캠프] Day09 - 예외처리 및 로그분석(ELK)

서버 개발시 오류분석, 디버깅을 할 때 콘솔에 찍힌 로그나 단순 텍스트 파일에 저장된 로그 파일을 분석하기엔 너무 가독성이 좋지 않고 어렵다. 로그가 너무 길어서 원하는 내용을 찾기 어렵다시간대별, 기능별로 분석하기 어렵다서버가 여러 개일 경우, 로그가 분산돼 있어 추적이 어렵다이런 문제들을 해결하기 위해 등장한 것이 로그 수집, 분석, 시각화 도구이다. 그중에서도 가장 많이 사용되는 조합이 바로 ELK스택이다.ELK란?Elasticsearch: 로그 데이터를 저장하고 검색하는 강력한 엔진 Logstash: 로그 데이터를 수집하고 필요한 정보를 추출하는 파이프라인 도구 Kibana: 저장된 로그를 보기 좋게 시각화해주는 도구 ELK 작동순서Spring Boot 애플리케이션 ↓ 로그파일 생성 (logb..

멋사 부트캠프 2025.06.28

[멋사 부트캠프] Day08 - OAuth2 소셜 로그인

우리가 보통 서비스를 만들 때, 소셜 로그인을 많이 사용한다. 처음 서비스를 접하는 사용자 입장에서 회원가입 폼을 일일이 입력하는 과정은 매우 번거롭고, 개발자 입장에서도 이를 직접 관리하는 것은 보안 리스크가 크다. 이러한 문제를 해결하기 위해 OAuth2 프로토콜 기반의 소셜 로그인이 널리 사용된다.OAuth2를 이용하면, 사용자가 직접 아이디와 비밀번호를 입력하지 않고도 구글, 카카오와 같은 외부 인증 서비스를 통해 로그인할 수 있다. OAuth2란?OAuth2는 제3자 애플리케이션이 사용자의 비밀번호를 직접 알지 않고도, 사용자의 자원(정보)에 접근할 수 있도록 허용해주는 권한 위임 프로토콜이다. 즉, 사용자가 카카오나 구글에 로그인한 뒤, 그 인증 정보를 기반으로 내 서비스에서 사용자 정보를 안..

멋사 부트캠프 2025.06.27

[멋사 부트캠프] Day04 - Gpt API

WebSocket을 활용한 GPT AI 챗봇 만들기1. WebSocket으로 client가 메시지를 전송한다.2. 서버가 클라이언트에게서 받은 메시지를 GPT api로 http전송한다.3. chat gpt는 받은 메시지를 바탕으로 응답을 WebSocket에게 다시 전송한다.4.서버가 gpt API 응답으로 받은 메시지를 WebSocket 통신으로 클라이언트에게 메시지 전송한다. OpenAI api 플랫폼에 가면 이런 명령어가 존재한다. OpenAI의 API에 요청을 보내서 GPT 모델로부터 응답(Response)을 받아오는 것이다. http://api.openai.com/v1/response -> url-H(헤더) Content-Type: application/json -> 보내는 데이터의 type이 j..

멋사 부트캠프 2025.06.20