1. 서비스 개요

항목 내용
프로젝트명 MOA
서비스명 auth/global module
서비스 유형 인사이트 아카이빙 서비스
개발 기간 2026.02.09 ~ 2026.02.13
개발 인원 5명
담당 역할 사용자 인증 도메인 설계, 로그인 검증 로직, JWT Access/Refresh Token 발급, Redis Refresh Token 저장소, 로그아웃 API 진입점 구현
사용 기술 Java 17, Spring Boot 4.0.2, Spring WebMVC, Spring Data JPA, Spring Security, JJWT, Spring Data Redis, MariaDB, Gradle, Lombok
플랫폼 Web Backend / Spring Boot API

2. 서비스 소개

MOA는 인사이트, 요약, 태그 등 콘텐츠성 데이터를 관리하는 Spring Boot 기반 백엔드 프로젝트입니다.

auth/global module은 MOA 서비스의 사용자 인증과 토큰 생명주기를 담당하는 공통 인증 모듈입니다. 사용자는 이메일을 기준으로 식별되며, 로그인 시 저장된 비밀번호 해시와 요청 비밀번호를 검증한 뒤 JWT Access Token과 Refresh Token을 발급하는 흐름을 구성했습니다.

또한 Refresh Token은 Redis에 RT:{email} 형태로 저장해 서버 측에서 토큰을 관리할 수 있도록 했고, 로그아웃 요청이 들어오면 Authorization 헤더에서 Bearer 토큰을 추출해 인증 서비스 계층으로 전달하는 API 진입점을 구성했습니다.


3. 담당 기능 요약

기능 설명
사용자 인증 Entity 설계 user 테이블과 매핑되는 AuthEntity를 구성하고 email, password, name, role 정보를 관리
인사이트 작성자 연관관계 AuthEntity와 InsightEntity를 1:N으로 연결해 사용자와 작성 콘텐츠의 관계 구성
사용자 Repository JpaRepository 기반으로 email을 PK로 사용하는 사용자 조회 및 중복 확인 흐름 구성
회원가입 서비스 흐름 이메일 중복 여부를 확인하고 사용자 정보를 저장하는 트랜잭션 서비스 구조 구성
로그인 검증 이메일로 사용자를 조회하고 PasswordEncoder.matches로 비밀번호 해시 검증
JWT 발급 유틸 JJWT 기반으로 사용자 email을 subject로 갖는 Access Token, Refresh Token 생성
토큰 만료 정책 Access Token 30분, Refresh Token 7일 만료 시간을 JwtProvider 내부에 분리
Refresh Token 저장 RedisTemplate을 사용해 Refresh Token을 RT:{email} 키로 7일 TTL 저장
Refresh Token 조회/삭제 email 기준 Refresh Token 조회 및 삭제 메서드 제공
로그아웃 API 진입점 /logout 요청의 Authorization 헤더에서 Bearer 토큰을 추출하고 서비스 계층으로 위임
환경 설정 연동 jwt.secret 값을 외부 환경변수 기반으로 주입받아 JWT 서명 키로 사용

4. 주요 구현 상세

기능 1. 이메일 기반 사용자 인증 도메인 설계

문제 상황

MOA 서비스의 인사이트, 요약, 태그 데이터는 사용자를 기준으로 생성되고 관리되어야 합니다. 따라서 사용자를 고유하게 식별할 수 있는 인증 도메인이 필요했고, 콘텐츠 작성자와 사용자 계정 간의 관계도 함께 표현해야 했습니다.

해결 방법

AuthEntity를 user 테이블과 매핑하고 email을 기본키로 사용했습니다. password, name, role을 사용자 인증 및 권한 판단에 필요한 필드로 구성했으며, InsightEntity와 1:N 관계를 설정해 사용자가 작성한 인사이트 목록을 엔티티 관계로 표현했습니다.

구현 포인트