1. 오늘 한 것 (What I Did)
- 구글 OAuth2 소셜 로그인 구현
- JWT 토큰 발급 시스템 구현 (AccessToken + RefreshToken)
- JWT 기반 API 보호 시스템 구현
구현한 파일들
src/
├── 00.auth/
│ ├── auth.service.ts # JWT 토큰 발급
│ ├── auth.controller.ts # 구글 로그인 API
│ ├── auth.module.ts # 인증 모듈
│ ├── google.strategy.ts # 구글 OAuth 전략
│ ├── google-auth.guard.ts # 구글 인증 가드
│ └── jwt.strategy.ts # JWT 검증 전략
├── 01.user/
│ ├── user.service.ts # 사용자 DB 관리
│ ├── user.controller.ts # 사용자 API
│ └── user.module.ts # 사용자 모듈
└── 10.common/
└── decorator/
└── user.decorator.ts # @User() 데코레이터
테스트한 API들
- GET /google/login - 구글 로그인 시작
- GET /google/redirect - 로그인 후 JWT 토큰 발급
- GET /user - JWT 인증 필요한 사용자 정보 조회
- DELETE /user - JWT 인증 필요한 사용자 삭제
2. 새로 이해한 것 (What I Learned)
환경변수 보안 관리
- .env에 민감한 정보 저장
- process.env.GOOGLE_CLIENT_ID로 접근
- Git에는 절대 올리면 안됨!
AccessToken vs RefreshToken 전략
- AccessToken: 1일, 실제 API 호출용
- RefreshToken: 7일, AccessToken 재발급용
- 보안과 편의성의 균형!
Bearer Token 방식
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
3. 여전히 잘 모르겠는 부분
Interface vs Class
- Interface는 "계약서" - 어떤 정보가 있어야 하는지 정의
- Class는 "실제 구현체" - 데이터와 기능을 모두 가짐
this의 진짜 의미
- this.jwtService = "이 AuthService 인스턴스가 가진 jwtService"
- 생성자에서 준비한 도구들을 메소드에서 사용하는 방식
OAuth2 플로우
- 이건 시간 내서 한번 그려봐야할 듯...
Strategy Pattern (전략 패턴)
- GoogleStrategy: 구글 OAuth 인증 방법 정의
- JwtStrategy: JWT 토큰 검증 방법 정의
- 나중에 카카오, 네이버 로그인도 같은 패턴으로 추가 가능!
Guard Pattern (가드 패턴)
- GoogleAuthGuard: 구글 인증 강제
- AuthGuard('jwt'): JWT 토큰 검증 강제
- API에 @UseGuards()만 붙이면 보안 적용
Dependency Injection (의존성 주입)
constructor(
private readonly jwtService: JwtService, // JWT 관련 기능
private readonly userService: UserService, // 사용자 DB 관리
) { }
'TIL' 카테고리의 다른 글
2025-08-11 NestJS API 테스트 및 문제 해결 (3) | 2025.08.11 |
---|---|
2025-08-10 NestJS UsersService CRUD 구현 및 DTO 작성 (2) | 2025.08.11 |
2025-08-09 NestJS + TypeORM DB 연동 (4) | 2025.08.10 |
2025-08-06 (6) | 2025.08.10 |
2025-08-03 (10) | 2025.08.03 |