2025-8-12 NestJS 구글 소셜 로그인 & JWT 인증 시스템 구현

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