본문 바로가기

Study

[내일배움캠프 TIL] 12일차 - JWT, Auth 구현(회원가입 로그인)

728x90
반응형

오늘은 JWT 토큰 발행하는 부분과 Auth를 통해 회원가입 로그인하는 부분까지 

개발을 진행하였습니다.

아직 이 부분은 헷깔리는 부분이 많고, security, 필터 등 개념이 안잡혀서

정리가 필요합니다.

 

오늘 가장 중요한 부분은 security + JWT 인증 하는 부분입니다.

 

1. 🏗️ 핵심 개념: "누가 무엇을 하는가?"

Security는 각자의 역할이 명확한 **'분업 시스템'**입니다.

  • @PostConstruct: 빈(Bean)이 생성된 후 딱 한 번만 실행되는 초기화 메서드. (주로 JWT 비밀키 설정 등에 사용)
  • UserDetail: 시큐리티가 이해하는 '표준 신분증 양식'.
  • UserDetailService: DB에서 유저를 찾아 신분증(UserDetail)을 발급해주는 '도서관 사서'.
  • AuthenticationFilter: 로그인 요청을 낚아채서 검사를 시작하는 '현관 문지기'.
  • SecurityConfig: 이 모든 요원들을 배치하고 성문의 규칙(URL 권한)을 정하는 '설계도'.

 

login하는 부분은 PostMapping을 쓰지 않고,

UsernamePasswordAuthenticationFilter를 상속받아 필터를 만들어서
경로를 설정하여 사용하였습니다

public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
    private final JwtTokenProvider jwtTokenProvider;

    public JwtAuthenticationFilter(JwtTokenProvider jwtTokenProvider){
        this.jwtTokenProvider = jwtTokenProvider;
        setFilterProcessesUrl("/api/v1/auth/login");
    }

 

로그인 인증 전체 흐름입니다.

# 🚀 Spring Security + JWT 인증 시스템 구축 플랜

오늘 하루 동안 겪으신 시행착오와 Spring Security의 핵심 동작 원리를 정리한 가이드입니다.

## 1. 🔄 로그인 인증 전체 흐름 (Authentication Flow)

사용자가 로그인을 시도했을 때 (`POST /api/v1/auth/login`), 서버 내부에서는 다음 순서로 일이 벌어집니다.

1.  **JwtAuthenticationFilter (문지기)**
    *   사용자가 보낸 ID/PW를 가로챕니다.
    *   이 정보를 가지고 `UsernamePasswordAuthenticationToken`이라는 '임시 신분증'을 만듭니다.
    *   이 신분증을 **AuthenticationManager**에게 넘기며 "이 사람 맞는지 확인해줘!"라고 요청합니다.

2.  **AuthenticationManager (인증 책임자)**
    *   직접 확인하지 않고, 등록된 **UserDetailsService**에게 "이 아이디 가진 사람 정보 좀 가져와봐"라고 시킵니다.

3.  **UserDetailsService (정보 조회원)**
    *   DB(`UserRepository`)에서 해당 사용자를 찾습니다.
    *   찾은 정보를 Spring Security가 이해할 수 있는 **UserDetails** 객체로 포장해서 반환합니다.

4.  **비밀번호 검증 (Manager의 역할)**
    *   DB에서 가져온 암호화된 비밀번호와 사용자가 입력한 비밀번호를 비교합니다. (`PasswordEncoder` 사용)
    *   일치하면 '인증된 신분증'을 필터에게 돌려줍니다.

5.  **성공 처리 (Filter의 마무리)**
    *   인증이 성공하면 `successfulAuthentication` 메서드가 실행됩니다.
    *   여기서 **JwtTokenProvider**를 이용해 JWT 토큰을 만들고 사용자에게 응답합니다.

---

## 2. 🧩 핵심 컴포넌트 요약

| 컴포넌트 | 역할 | 비유 |
| :--- | :--- | :--- |
| **JwtAuthenticationFilter** | 로그인 요청 가로채기 & 결과 응답 | **입구 검문소** |
| **AuthenticationManager** | 인증의 전체 과정 총괄 | **검문소 소장** |
| **UserDetailsService** | DB에서 사용자 정보 찾아오기 | **도서관 사서 (장부 확인)** |
| **UserDetails** | Spring Security용 사용자 정보 객체 | **회원 명부 양식** |
| **JwtTokenProvider** | 토큰 생성 및 검증 | **인감 도장 / 열쇠 제작소** |
반응형