본문 바로가기

Spring & SpringBoot31

[Spring Boot & React] MongoDB와 WebSocket으로 구현하는 실시간 채팅 시스템 (JPA 하이브리드 설계) 실시간 통신이 필요한 채팅 서비스를 구현할 때, 데이터베이스 선택과 통신 프로토콜 설계는 가장 중요한 고민거리입니다. 이번 포스팅에서는 **MariaDB(JPA)**의 안정성과 MongoDB의 유연함을 결합한 하이브리드 아키텍처를 바탕으로, **WebSocket(STOMP)**을 이용해 실시간 채팅을 구현한 과정을 공유합니다. 1. 하이브리드 데이터베이스 설계 (JPA + MongoDB)모든 데이터를 한 곳에 담지 않고, 성격에 따라 데이터베이스를 분리하여 효율을 높였습니다.MariaDB (JPA): 채팅방 이름, 생성일, 최대 참여 인원 등 정적인 메타데이터를 저장합니다. 데이터 일관성이 중요한 '방 관리'에 적합합니다.MongoDB: 방대하게 쌓이는 **채팅 메시지(비정형 데이터)**를 저장합니다... 2025. 12. 14.
[Vite/React + Spring Boot] 카카오 소셜 로그인 완벽 연동 가이드 📝 1단계: 카카오 개발자 센터 및 환경 설정1. 카카오 개발자 센터 설정 요약REST API 키: 발급 후 확인. (Client ID로 사용)로그인 Redirect URI: http://localhost:3000/oauth/kakao 등록.로그아웃 Redirect URI (SSO 해제용): http://localhost:3000 등록.동의 항목: 닉네임, 이메일 등 필수 항목 설정.2. 환경 변수 (.env) 설정 # .env (프로젝트 루트)VITE_KAKAO_REST_API_KEY="YOUR_REST_API_KEY"VITE_KAKAO_REDIRECT_URI="http://localhost:3000/oauth/kakao"💻 2단계: 프론트엔드 (React + Zustand) 구현 상세1. Logi.. 2025. 12. 11.
💡 Spring Boot에서 @RestControllerAdvice는 어디까지 적용될까? Spring Boot에서 예외 처리를 전역으로 적용할 때 사용하는 @RestControllerAdvice,그런데 문득 이런 궁금증이 들었습니다.❓ "@RestControllerAdvice에 basePackages를 명시하지 않으면 어디까지 적용될까?" ✅ 결론 먼저@RestControllerAdvice에 basePackages, assignableTypes 등을 지정하지 않으면...👉 해당 클래스는 @Controller 또는 @RestController가 붙은 모든 클래스에 전역 적용됩니다. 🔍 기본 동작 원리@RestControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler(IllegalArgumentException.cla.. 2025. 7. 25.
GitHub Actions + Self-hosted Runner로 구성한 MSA 자동 배포 시스템 1. 프로젝트 구조 개요이번 프로젝트는 MSA 아키텍처 기반으로 구성되었으며, 다음과 같은 서비스들로 나뉩니다:✅ gateway (Spring Cloud Gateway)✅ auth-service (JWT 기반 인증 서비스)✅ user-service (사용자 도메인 서비스)✅ eureka-server (서비스 디스커버리)각 서비스는 개별 GitHub Repository에서 관리되며, 각각 Docker 이미지로 빌드되어 Docker Hub에 push되고, 이후 집 PC(WLS 환경)에서 pull 및 자동 container 재기동되는 구조입니다. 2. GitHub Actions CI 구성각 서비스는 다음과 같은 GitHub Actions workflow를 사용해 Docker 이미지로 자동 빌드됩니다:name:.. 2025. 7. 22.