1. 구현 API 개요

인증 API는 회원가입과 로그인을 담당하며, 투표 API는 데모데이 투표와 파트장 투표 기능으로 구성되어 있습니다. 로그인 이후에는 JWT 기반 access token을 쿠키로 전달하고, 투표 API 호출 시 해당 쿠키를 통해 사용자를 인증하는 구조입니다.

1-1. 데이터베이스(DB) 및 서버 인프라 구축 ·

본 프로젝트는 로컬 개발 환경과 실제 운영(Production) 환경을 완벽히 분리하여 구축했습니다. AWS EC2 인스턴스(Ubuntu) 내부에 MySQL을 설치하고, Spring Boot 서버가 localhost:3306/vote_db를 바라보도록 설정하여 독립적인 운영 DB 환경을 마련했습니다. 이를 통해 로컬 테스트 데이터와 실제 서비스 데이터가 섞이지 않도록 격리성을 확보했습니다.


2. 회원가입 API

회원가입 API의 경로는 /signup입니다.

이번 프로젝트의 회원가입은 일반적인 신규 회원 생성 방식이 아니라, DB에 미리 등록된 사용자 정보를 기반으로 계정을 활성화하는 방식입니다.

즉, 사용자가 입력한 name, team, part, inviteCode 값을 기준으로 기존 users 테이블에서 일치하는 사용자를 찾고, 해당 사용자 레코드에 loginIdpassword를 등록합니다.

비밀번호는 그대로 저장하지 않고, PasswordEncoder를 사용해 암호화한 뒤 저장합니다. 이를 통해 DB에 비밀번호 원문이 노출되지 않도록 처리했습니다.


3. 로그인 API ·

로그인 API의 경로는 /login입니다.

사용자가 loginIdpassword를 입력하면, 서버는 해당 정보를 검증한 뒤 JWT access token을 생성합니다. 생성된 토큰은 응답 바디가 아니라 응답 헤더의 Set-Cookie를 통해 쿠키로 전달됩니다.

항목 설정값 설명
name accessToken JWT가 저장되는 쿠키 이름
HttpOnly true JavaScript에서 쿠키 접근 불가
Secure false 현재 개발 환경에서는 HTTPS가 아니어도 전송 가능
Path / 전체 경로에서 쿠키 사용 가능
Max-Age 3600 1시간 유지
SameSite Lax 기본적인 CSRF 방어 효과

이번 구현에서는 JWT를 직접 구현한 JwtProvider에서 생성하고 검증합니다.

JWT payload에는 sub, iat, exp가 포함되며, sub에는 사용자 ID가 저장됩니다. 이후 투표 API에서는 쿠키에 담긴 access token을 읽어 JWT의 서명과 만료 시간을 검증하고, userId를 추출해 DB에서 실제 User 정보를 조회합니다.


4. JWT 기반 인증 흐름

투표 API 호출 시 인증 흐름은 다음과 같습니다.