회원가입 및 로그인에 필요한 로직을 처리하는 서버입니다.
📝 API 명세서
회원가입 요청을 처리합니다.
- POST
/member/signup
{
"email": "[email protected]" ,
"name" : "노희재",
"password": "Testing" ,
"birth": "1997-08-30" ,
"phone" : "010-1234-5678" ,
"gender" : "남"
}-
✅ 성공
{ "code": 200, "description": "성공" }
⚠️ 이미 존재하는 회원인 경우{ "code": 409, "description": "이미 존재하는 회원입니다" }
이메일 중복체크를 합니다.
중복체크를 통과한다면, 이메일에 인증번호를 전송합니다.
- POST
/member/checkDuplicateEmail
{
"email": "[email protected]"
}-
✅ 성공
{ "code": 200, "description": "성공" }
⚠️ 중복된 이메일인 경우{ "code": 409, "description": "중복된 이메일 입니다" }
로그인 요청을 처리합니다.
- POST
/member/login - Parameter
- email: string
- password: string
{
"email": "[email protected]" ,
"password": "Testing" ,
}-
✅ 성공
-
header
{ "authorization": ... } -
Body
{ "code": 200, "description": "성공" }
-
- 실패
⚠️ 존재하지않는 회원정보일 경우{ "code": 404, "description": "존재하지 않는 회원입니다" }
올바른 인증번호인지 확인합니다.
- POST
/member/validation - Parameter
- email: string
- authNum:
{
"email": "[email protected]" ,
"authNum": 123456
}-
✅ 성공
{ "code": 200, "description": "성공" }
- 실패
⚠️ 잘못된 인증번호{ "code": 404, "description": "잘못된 인증번호입니다" }
JWT 토큰으로 회원을 식별하고 회원의 정보를 가져옵니다.
- GET
/member/info - Headers
- Authorization: login token
{
"email": "[email protected]" ,
"name" : "노희재",
"password": "Testing" ,
"birth": "1997-08-30" ,
"phone" : "010-1234-5678" ,
"gender" : "남"
}{
"code": 200,
"data": {
"name": "노희재",
"email": "[email protected]",
"phone": "010-1234-5678",
"birth": "1997-08-30"
},
"description": "성공"
}- 이메일 인증 절차
-
checkDuplicateMember 로 요청이 오면, 백엔드 서버가 이메일 중복체크 로직을 거친 뒤 인증번호를 생성하며 이를 Redis 에 저장합니다. (만료시간 - 5분)
-
생성된 인증번호를 RabbitMQ 에 전송요청(메세지)을 보냅니다.
-
RabbitMQ 는 Queue 에 메세지를 쌓아두고 순차적으로 Python 에 메일 전송요청을 보내게 됩니다.
-
Python 은 사용자에게 인증번호를 전송합니다.
-
사용자는 인증번호를 입력하고, checkValidation 요청을 보냅니다.
-
Spring 은 사용자가 입력한 인증번호와 Redis 에 저장되어있는 인증번호를 비교하여 일치한다면 Redis 에 저장되어있는 값을 삭제하고 인증 성공 응답을 보냅니다.
-
Java 11
-
Spring Boot 2.X
-
Spring Cloud Open Feign
-
Spring Data JPA
-
Spring Data Redis
-
Spring AMPQ
-
-
MariaDB : 10.3
-
Redis : 7.0.10
-
RabbitMQ:3.11.10
-
다양한 로그인 처리 방법을 비교해 보고 프로젝트에 적합한 방법을 선택하고자 하였습니다.
-
Redis, RabbitMQ 등 처음 써보는 소프트웨어를 적절한 사용처에 사용할 수 있도록 하였습니다.
-
초기에는 Refresh Token + Access Token 방식을 사용하여 인증, 인가 처리를 하였지만 Istio 에서 Refresh 토큰을 처리할 방법이 마땅치 않고, 처리할 방법들이 너무나 비효율적인 방법들이라고 생각하여 Access 토큰만을 이용한 인증,인가를 하였다는 점이 아쉽습니다.
-
예외처리, 테스트 코드 작성 등 미숙한 부분이 보여 아쉽습니다. 이 부분을 조금 더 보완하여 리팩토링을 진행하면 좋을것 같습니다.

