본문 바로가기
Today I Learned 2024. 5. 21.

(24.05.21)[6주차] Spring 숙련 강의 01

Spring 숙련 주차가 시작이되었고 관련 개인과제에 대한 시작이지만,

상당히 양이 많아서 이번주는 집중을 학습에 특히나 집중을 요해야할 것 같다.


Spring 숙련 강의 간단정리

  • 숙련단계에서는 JWT  등의 보안과 관련된 내용을 다루면서 학습이 진행될 예정
  • 조금만 집중을 하지 않으면, 이해하는데 많이 힘이 들 수 있기 때문에 학습내용을 다시 복습하면서 블로그에 정리
더보기

Bean 수동 등록

  • @Component를 사용하면 @ComponentScan에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록
  • 기술적인 문제공통적인 관심사를 처리할 때 사용하는 객체들을 수동으로 등록

기술 지원 Bean

  • 공통 로그처리와 같은 비즈니스 로직을 지원하기 위한 부가 적이고 공통적인 기능 Bean

같은 타입 Bean 등록

  • Food 라는 interface를 Chicken, Pizza 클래스에 각각 implements해서 구현하는 것은 문제 X 단, 반대로 @Autowired 를 통해서 주입되면 문제가 되는 것

등록된 Bean 이름 직접 명시

  • @Autowired 는 Bean 타입(Food)을 먼저 찾고 그다음에 이름을 찾기 때문에 가능

@Primary

  • 일단 제일 먼저 해당 Bean 객체만 주입 시킬 수 있음

@Qualifier

  • ()에 넣은 이름으로 직접 해당 Bean을 지정시킬 수 있다는 것
  • ***우선순위는 @Qualifier > @Primary
    • SPring 기준 좁은 범위를 다루는 기능일 수록 우선순위가 높음

인증(Authentication)

  • 유저가 실제로 존재하는지 인증하는 개념

인가(Authorization)

  • 유저가 해당 리소스에 접근한지 허가를 하는 개념

웹 애플리케이션 인증

  • 클라이언트-서버 의 관계는 비연결성(Connectionless) 무상태(Stateless)

비연결성(Connectionless)

  • 클라이언트-서버는 연결되어 있지 않는 리소스 적약의 형태

무상태(Stateless)

  • 서버는 클라이언트의 상태를 저장하지 않는 절약의 형태

인증 방식

쿠키-세션 방식의 인증

  • 서버가 인증에 대한 최소한의 정소를 가져서 유저를 로그인 상태를 유지시키게 하는것

JWT 기반 인증

  • JWT(JSON Web Token) : 인증에 필요한 정보들을 암호화시킨 JSON 형태의 토큰 이후 강의 참고
  • 세션 저장소가 없이 Token을 검증하는 단계만 있음
    • 세션 저장소에는 일일히 모든 ID 검증해야하는 SESSION ID를 저장하고 있어야함

쿠키

  • 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일

세션

  • 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용

JWT, Json Web Token

  • JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token

JWT 사용

  • 로그인 정보를 Server 에 저장하지 않고, Client 에 로그인 정보를 JWT 로 암호화하여 저장JWT 통해 인증/인가
  • 따라서, 모든 서버에서 동일한 Secret Key 소유

JWT flow

Client 에서 JWT 통해 인증방법

  • 서버에서 API 요청 시마다 쿠키에 포함된 JWT를 찾아서 사용
  • 정보가 여러개 있을 수 있기 때문에 JWT와 동일한지 쿠키를 받을 떄 확인

Server 에서 JWT 통해 인증방법

  1. Client 가 전달한 JWT 위조 여부 검증 (Secret Key 사용)
  2. JWT 유효기간이 지나지 않았는지 검
  3. 성공시, JWT에서 사용자 정보를 가져와 확인

JWT 구조

  • 당연히 Payload는 JSON 형태

필터 Filter

  • 요청과 응답에 대해 최초/최종 단계의 위치해서 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가
    • 범용적으로 처리(로깅, 보안처리)
    • 인증, 인가 부분만 비지니스 로직과 분리하여 관리
  • 필터에서 가져오고, 필터로 내보내는 작업을 Server는 해야하는 것

 


보안과 관련하여 궁금한 점이 많아서 바로 JWT 학습까지 진행을 했지만, 상당히 난이도가 있어서 조금 더디게 진행되는 것

강의와 노트를 여러번 읽어보도록 해야할 것