Today I Learned
(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 통해 인증방법
- Client 가 전달한 JWT 위조 여부 검증 (Secret Key 사용)
- JWT 유효기간이 지나지 않았는지 검
- 성공시, JWT에서 사용자 정보를 가져와 확인
JWT 구조
- 당연히 Payload는 JSON 형태
필터 Filter
- 요청과 응답에 대해 최초/최종 단계의 위치해서 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가
- 범용적으로 처리(로깅, 보안처리)
- 인증, 인가 부분만 비지니스 로직과 분리하여 관리
- 필터에서 가져오고, 필터로 내보내는 작업을 Server는 해야하는 것
보안과 관련하여 궁금한 점이 많아서 바로 JWT 학습까지 진행을 했지만, 상당히 난이도가 있어서 조금 더디게 진행되는 것
강의와 노트를 여러번 읽어보도록 해야할 것
'Today I Learned' 카테고리의 다른 글
(24.05.23)[6주차] Spring 숙련 강의 03 (0) | 2024.05.23 |
---|---|
(24.05.22)[6주차] Spring 숙련 강의 02 (0) | 2024.05.22 |
(24.05.20)[6주차] compare, compareTo 메서드 비교 & 사용자 정의 Comparator 활용 (0) | 2024.05.20 |
(24.05.18)[5주차] WIL (0) | 2024.05.18 |
(24.05.17)[5주차] Spring 입문 마무리(SpringBoot JPA @ExceptionalHandler) (0) | 2024.05.17 |