메신저와 쇼핑 기능이 결합된 서비스입니다. 현대이지웰 자바 풀스택 개발 과정 6인 팀 프로젝트로 메신저/쇼핑/인증 도메인을 2명씩 나눠 진행했습니다.
인증 도메인 백엔드 (2인 중 1)
- Java 21, Spring Boot 3.5, Spring Security
- JPA(Hibernate)
- Oracle DB
- JWT
- AWS S3(프로필 이미지 업로드)
- WebSocket / STOMP(실시간 채팅)
메신저와 쇼핑 기능이 공존하는 서비스 특성상, 서버 메모리를 소모하는 세션 방식보다 JWT가 적합하다고 판단했습니다. 다만 JWT는 토큰 유효성만으로 인증을 처리해 탈퇴한 사용자도 토큰이 만료되기 전까지 접근 가능한 보안 공백이 있었습니다. AuthenticationFilter에서 JWT 유효성 검증 후 DB에서 사용자 존재 여부를 추가로 확인하는 이중 검증 구조를 적용해, 탈퇴 사용자를 즉시 차단했습니다.
고정된 Refresh Token은 탈취 시 만료 전까지 계속 악용될 수 있습니다. 재발급 요청마다 기존 Refresh Token을 즉시 폐기하고 새 토큰으로 교체했고, 요청 토큰과 DB 저장 토큰이 불일치하면 즉시 예외 처리로 차단했습니다. Refresh Token은 HttpOnly 쿠키로 전달해 XSS 공격으로 탈취되지 않도록 했습니다.
사용자가 탈퇴해도 관련된 친구의 선물 내역, 채팅 기록은 보존되어야 했습니다. DELETED_AT 컬럼과 @SQLRestriction으로 탈퇴 계정을 조회에서 자동 제외하고, loginId를 deleted_{userId}로 마스킹해 동일 아이디로 재가입이 가능하도록 했습니다. 배송 중인 주문이 있으면 탈퇴 자체를 차단해 데이터 정합성을 유지했습니다.
부트캠프 기간 중 사용한 AWS 프리티어가 만료되어 S3 연동을 비롯한 일부 인프라가 현재 비활성화된 상태입니다. 라이브 데모보다는 코드 레벨 검토를 위한 참고용 리포지토리입니다.