types
패키지는 OAuth 통합 인증 시스템의 재사용 가능한 데이터 타입을 관리하기 위함
auth.types.ts
// src/auth/types/auth.types.ts
import { Provider } from '../enums/provider.enum';
// OAuth 제공자의 공통 토큰 응답 타입
export interface OAuthTokenResponse {
access_token: string; // 액세스 토큰
token_type: string; // 토큰 타입 (예: Bearer)
refresh_token?: string; // 리프레시 토큰 (선택적)
expires_in: number; // 토큰 만료 시간 (초 단위)
scope?: string; // 요청된 권한 범위
id_token?: string; // OpenID Connect에서 반환되는 ID 토큰 (선택적)
}
// 제공자별 토큰 응답 타입 확장
export interface KakaoTokenResponse extends OAuthTokenResponse {
refresh_token_expires_in: number; // 리프레시 토큰 만료 시간 (초 단위)
}
export interface NaverTokenResponse extends OAuthTokenResponse {
error?: string; // 에러 코드 (선택적)
error_description?: string; // 에러 설명 (선택적)
}
export interface AppleTokenResponse extends OAuthTokenResponse {
id_token: string; // Apple은 항상 ID 토큰을 반환
}
// OAuth 사용자 프로필 응답 타입
export interface OAuthUserProfile {
id: string; // 사용자 고유 ID email?: string; // 이메일 주소
name?: string | { firstName?: string; lastName?: string }; // 이름 (문자열 또는 객체 형태)
picture?: string; // 프로필 사진 URL provider: Provider; // OAuth 제공자 (예: Google, Kakao 등)
raw?: any; // 제공자의 원본 응답 데이터
}
// 제공자별 사용자 프로필 응답 타입
export interface KakaoUserProfile {
id: number; // 사용자 ID kakao_account?: {
email?: string; // 이메일 주소
email_verified?: boolean; // 이메일 인증 여부
profile?: {
nickname?: string; // 닉네임
profile_image_url?: string; // 프로필 이미지 URL };
};
}
export interface NaverUserProfile {
resultcode: string; // 응답 코드 (성공: 00)
message: string; // 응답 메시지
response: {
id: string; // 사용자 고유 ID email?: string; // 이메일 주소
name?: string; // 이름
profile_image?: string; // 프로필 이미지 URL };
}
export interface AppleUserProfile {
sub: string; // 사용자 고유 ID email?: string; // 이메일 주소
email_verified?: boolean; // 이메일 인증 여부
name?: {
firstName?: string; // 이름 (성)
lastName?: string; // 이름 (이름)
};
}
- OAuth 제공자별 응답 데이터를 구조화하여 인터페이스로 정의
- 제공자별 응답 타입(
KakaoTokenResponse
, NaverTokenResponse
등)은 OAuthTokenResponse
를 확장(extends)하여 공통 속성과 제공자 특화 속성을 명확히 구분
- 표준화된 프로필 타입(
OAuthUserProfile
)을 통해 서비스 레이어에서 일관된 사용자 데이터를 처리
- 제공자별 사용자 프로필 타입(
KakaoUserProfile
, NaverUserProfile
, AppleUserProfile
)도 원본 데이터를 유지하며, 필요한 변환 작업에 유용
- 각 OAuth 제공자별로 데이터 구조가 달라질 수 있으므로 타입 정의를 통해 컴파일 타임에 오류를 방지
oauth.types.ts
- OAuth 제공자의 응답 데이터와 사용자 프로필 데이터를 정의
- 애플리케이션의 타입 안정성과 재사용성을 보장하기 위해 적절하게 설계
OAuthTokenResponse
와 OAuthUserProfile
은 OAuth 응답 데이터의 공통 타입을 정의
- 제공자별 특화 데이터(
KakaoTokenResponse
, NaverTokenResponse
, AppleTokenResponse
)는 공통 타입을 확장(extends)하여 재사용성과 일관성을 확보
OAuthUserProfile
은 표준화된 사용자 데이터 구조를 제공
raw
속성을 포함하여 제공자별 원본 응답 데이터를 유지하면서, 프로필 데이터를 쉽게 확장할 수 있도록 함.
Provider
enum을 활용하여 provider
필드의 값 범위를 제한함으로써, 타입 안전성을 보장
token.types.ts
- JWT 토큰 관리와 관련된 타입을 정의하며,
- 인증과 관련된 데이터 구조를 명확히 나타냄.
-
- JWT 토큰의 구조를 명확히 정의하여 타입 안정성을 확보
type
속성을 통해 토큰이 액세스 또는 리프레시 토큰인지 구분할 수 있도록 함.
- 토큰 발급 API의 응답 타입을 정의하여, 서버와 클라이언트 간 데이터 전송 구조를 명확히 함.
- 만료 시간(
expires_in
)과 발급 시간(issuedAt
)을 포함하여 토큰 관리 로직을 구현하기 쉽게 설계.
- JWT 처리 로직과 통합하여 사용하면 인증 및 토큰 갱신 작업을 체계적으로 구현 가능
user.types.ts
- 사용자와 관련된 데이터 타입을 정의
- 사용자 프로필 관리와 관련된 로직에서 중요한 역할
UserProfile
은 사용자 데이터의 전체 구조를 명확히 정의하며, 사용자 데이터를 읽거나 전달할 때 일관성을 보장
CreateUserDto
와 UpdateUserDto
를 분리하여 사용자 생성과 업데이트 시 필요한 필드만 포함하도록 설계