본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://fastcampus.info/4n8ztzq
안녕하세요 :)
오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 " 챌린지에 도전하는 서른 일곱번째 날입니다.
서른 여섯번째 날에는 채팅 프로젝트에 인증 기능 추가에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.
오늘 학습할 내용의 제목은,
Part 4. 서비스 부하 분산을 위한 분리 시작 >
Ch 1. 데이터베이스의 고가용성 확보와 성능 개선을 위한 리플리카 >
02. Docker Compose를 사용한 로컬 데이터베이스 리플리카 구성
입니다.
🔐 채팅 프로젝트에 사용자 인증 기능 연동하기
– 실전 프로젝트에 인증 시스템 붙이기
- 이제 채팅 기능만 있는 프로젝트를 넘어서, 진짜 사용자 기반의 시스템으로 확장할 차례입니다.
- 이번 글에서는 사용자 인증 기능을 기존 채팅 프로젝트에 통합하는 과정을 정리합니다.
📁 두 개의 프로젝트, 하나로 합치기
- 우리가 지금까지 따로 작업해온 두 개의 프로젝트가 있습니다.
- ✅ 채팅 프로젝트: 메시지 테이블까지 연동된 프로젝트
- ✅ 인증 프로젝트: Redis 기반 세션 관리 및 Spring Security 기반 인증 구현
- 이번 작업은 이 둘을 통합해 하나의 인증 기반 채팅 프로젝트로 만드는 것입니다. 기본 방향은 다음과 같습니다.
- 인증 기능 관련 코드들을 채팅 프로젝트로 복사
- 설정, 의존성, 엔티티 등 통합
- 서버 실행 확인
- 이후 단계에서 사용자 등록, 로그인, 로그아웃 기능 추가
🔧 의존성 및 환경 설정
- 먼저 Gradle에 다음과 같은 의존성을 추가했습니다.
- spring-boot-starter-security
- spring-boot-starter-web
- spring-boot-starter-data-redis
- spring-boot-starter-websocket
- 이후 docker-compose.yml에 Redis와 Redis Insight 설정을 추가하고, DB와 Redis, Insight가 정상적으로 실행되는지 확인했습니다.
- 또한 프로젝트 이름도 일관성을 위해 using-db → session으로 변경하고, 해당 변경사항을 전체 경로에 반영했습니다.
🧱 코드 통합 및 구조 리팩토링
✅ 인증 관련 클래스 통합
- User 엔티티 및 Repository 복사
- 로그인 요청을 위한 DTO, 필터, 서비스, 설정 클래스 모두 auth 패키지로 복사
- Redis 관련 설정, Security 설정도 통합 완료
🔄 중복 로직 제거 – BaseEntity 생성
- createdAt, updatedAt처럼 공통으로 사용하는 필드 및 메서드를 상위 클래스로 분리했습니다.
- 모든 엔티티가 BaseEntity를 상속받도록 변경하여 코드 중복을 제거하고 유지보수성을 향상시켰습니다.
🚀 서버 실행 및 인증 테스트
- 통합된 코드를 기반으로 프로젝트를 실행한 결과, 서버는 정상적으로 구동되었습니다. 다만, 로그인 시도 시 인증 실패 에러가 발생했는데요, 이는 현재 DB에 등록된 사용자가 없기 때문이었습니다. 👉 인증 기능 자체는 정상적으로 동작하며, 사용자 등록 로직이 추가되면 해결될 문제입니다. 이 과정을 통해 프로젝트가 인증 기반 시스템으로 전환될 준비가 마무리되었습니다.
📌 다음 단계 예고
- 이제 다음 작업은 본격적으로 사용자 기능을 확장하는 것입니다.
- 사용자 등록 (회원가입) 기능 추가
- 로그인/로그아웃 API 구현
- 채팅 클라이언트에 인증 기능 연동
- WebSocket 접속 시, 로그인된 사용자만 허용하도록 세션 필터링 적용
- Redis Insight, MySQL Workbench 등으로 통합 테스트
- 인증 기능을 모듈화한 후 기존 시스템에 통합하는 구조는 실무에서도 매우 중요합니다. 이 과정에서 다양한 의존성, 설정 충돌, 네이밍 규칙 등을 정리하는 경험은 큰 자산이 됩니다.
- 공통 기능을 BaseEntity로 분리하면서, 중복 제거는 단순히 코드량을 줄이는 게 아니라 코드의 품질을 높이는 일이라는 걸 다시금 체감했습니다. 그리고 무엇보다, 기능 단위로 쪼개서 통합하는 방식이 시스템 고도화를 안정적으로 진행하는 핵심 전략이라는 걸 확인할 수 있었습니다.