Skip to content

Identity API 및 인증 기반 구현 #48

Description

@kusuri12-09

Summary

Identity 서비스의 테스트, JWT 발급 유틸, 예외 처리, 도메인 모델, API 10개를 구현합니다.

Problem / Motivation

실제 인증 및 사용자 정보 제공 서비스로 동작하려면 Controller 검증을 위한 테스트, JWT 발급/재발급 기반, 공통 예외 처리, 순수 도메인 모델, API 명세에 정의된 10개 엔드포인트 구현이 필요합니다.

요구사항 상 access token은 2시간, refresh token은 7일 만료되어야 하며, 두 토큰 모두 HttpOnly 쿠키로 브라우저에 전달되어야 합니다. 또한 applications 관련 API는 application service 데이터를 복사한 조회 모델을 사용하고, 이벤트 수신 시 해당 데이터를 갱신할 수 있어야 합니다.

Proposed Solution

  1. 테스트 코드 작성

    • Controller 테스트 코드를 작성합니다.
    • Service 테스트 코드를 작성합니다.
    • 그 외 테스트는 후속 작업으로 분리합니다.
  2. JWT 발급 유틸 개발

    • access token 만료 시간을 2시간으로 설정합니다.
    • refresh token 만료 시간을 7일로 설정합니다.
    • 토큰을 HttpOnly 쿠키로 내려보낼 수 있는 응답 유틸 또는 어댑터 흐름을 구성합니다.
  3. ErrorCode 및 Exception Handler 작성

    • API 명세의 에러 코드를 기준으로 ErrorCode를 정의합니다.
    • 공통 Exception Handler를 추가해 표준 에러 응답을 반환합니다.
  4. 순수 도메인 모델 정의

    • account, student profile, pass verification 등 Identity 핵심 도메인 모델을 정의합니다.
    • 도메인 모델은 프레임워크 의존성을 피하고 핵심 상태와 행위를 표현합니다.
  5. API 10개 구현

    • 유저 회원가입 API (POST /auth/signup)
    • 유저 로그인 API (POST /auth/login)
    • 유저 로그아웃 API (POST /auth/logout)
    • 토큰 갱신 API (POST /auth/token)
    • 비밀번호 재설정 API (PATCH /auth/password-reset)
    • 회원탈퇴 API (DELETE /accounts/me)
    • 기본 정보 조회 API (GET /accounts/me)
    • 지원 상태 조회 API (GET /applications/status)
    • 합격 여부 조회 API (GET /applications/result)
    • 원서 제출 취소 API (PATCH /applications/cancellation)

Scope

  • In scope:

    • systems/identity 멀티모듈 내부 구현
    • Controller, Port, Service, domain, exception, JWT 유틸, 테스트 코드
  • Out of scope:

    • 실제 PASS 인증 연동
    • application service의 실제 이벤트 발행 구현
    • 추후 작성으로 분리된 나머지 테스트

Dependencies / Risks

  • gateway를 거쳐 요청이 들어오는 흐름을 고려해야 합니다.
  • access token과 refresh token은 body가 아니라 HttpOnly cookie로 전달되어야 합니다.
  • applications API는 application service의 복사 데이터를 사용해야 하므로 동기화 이벤트 처리 설계가 필요합니다.
  • ../casper-user 서비스 구조를 참고해 Identity 아키텍처와 구현 스타일을 맞춰야 합니다.

Additional Notes

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions