본문 바로가기
Spring

Spring_3주차-(1)

by shulk 2023. 11. 7.

1. Bean을 수동으로 등록

* Bean을 자동말고 수동으로 등록은 언제 사용되나? -> 기술적인 문제나 공통적인 관심사를 처리할 때 사용하는 객체들을 수동으로 등록하는 것이 좋다.

* 수동등록된 Bean에서 문제가 발생했을 때 해당 위치를 파악하기 쉽다는 장점이 있다.

* 사용방법 예시를 보면 

  - config 패키지 생성후 PasswordConfig 클래스 생성

  - bean으로 등록하고자하는 객체를 반환하는 메소드를 선언하고 메소드 위에 @Bean 설정

  - bean을 등록하는 메소드가 속한 해당 클래스에 @Configuration을 설정

  - 이러면 Spring 서버가 뜰 때 Spring IoC 컨테이너에 'Bean'으로 저장된다.↓

(PasswordEncoder passwordEncoder = passwordConfig.passwordEncoder(); 호출하고 Spring IoC 컨테이너에 저장)

@Configuration
public class PasswordConfig {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

//복습해보면 빈으로 등록될때 맨앞 대문자가 아닌 소문자 passwordConfig식으로 등록

 

2. 같은 타입의 Bean이 여러개 일때

* 예를들어 이렇게 있을때 작업하는 곳에서 Food food; 필드에 @Autowired를 사용하여 Bean 객체를 주입려하면 치킨과 피자중 어느객체를 주입해야하나해서 오류가 난다.

*아래와 같이 3가지 해결 방법이 있는데 두번째 방법은 위에 코드 치킨 보면 @primary 설정해주고 

세번째 방법은 위에 코드 피자에 @Qulifier("별명") 설정하고 작업 하는 코드에서도 똑같이 @Qulifier("별명") 해준다.

 

* 같은 타입의 bean이 여러개 있을때에는 범용적으로 사용되는 bean객체에는 primary를,지역적으로 사용되는 bean객체는 Qualifier를 사용하는게 좋다

( primary, Qualifier 경우처럼 스프링에서 우선순위 생각하는 경우 많은데 대부분 거의 자주 사용되는건 우선순위가 낮고,사용빈도가 낮을땐 우선순위 높다라고 생각하면 된다)

 

3. 인증,인가

*인증은 로그인과 같이 해당 유저가 맞는지 확인하는걸 말하고, 인가는 유저가 특정 리소스에 접근 허가를 확인 하는걸 말한다.

*인가를 예를 들어보면 어떤 유저가 회원/비회원에 따라 글쓰기 사용 권한, 일반/ 관리자에 따라 페이지 관리 권한등 유저가 어떤 등급인지 판단하는거다.

 

4. 세션,jwt 로그인 방식

-왼쪽은 세션/ 오른쪽은 jwt 방식이고 jwt는 발급한 토큰을 세션처럼 따로 저장소에 저장하지 않는다했다. 그러면 유저들 토큰을 어디서 관리하는지 궁금하나 그건 뒤에서 나온다..

-왼쪽은 세션/ 오른쪽은 jwt

 

5. 쿠키와 세션

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

쿠키의 구성 요소

* 세션은 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용하고, 서버에서 생성한 세션id는 클라이언트의 세션 쿠키로 저장되어  클라이언트 식별에 사용된다

쿠키와 세션 비교표

 

6. JWT

*로그인 정보를 서버에 저장하지 않고 클라이언트에 로그인 정보를 JWT 로 암호화하여 저장 하고 모든 서버에서는 

동일한 Secret Key 를 갖고 있다가 클라가 쿠키에 jwt 정보를 담은뒤 서버에 보내면 서버는 Secret Key를 통해 인증한다.

JWT 장/단점

 

7. JWT 사용 흐름

(1) 클라이언트가 아이디,비번 로그인 성공하면 서버에서는 로그인 정보를 JWT 로 암호화 (Secret Key 사용)한다.

JWT 로  암호화한 예시

 

(2) 서버에서 직접 쿠키 생성해 JWT를 담아(밑에 코드보면 token) 클라이언트 응답에 전달한다.

(오른쪽 캡처보면 브라우저 쿠키 저장소에 JWT저장됨)

 

(3) 이제 클라가 어떤 인증관련 요청을 보냈을때 서버에서는 쿠키에 포함된 JWT를 찾아서 검증하고 응답한다.

( JWT 위조 여부 검증 (Secret Key 사용), JWT 유효기간이 지나지 않았는지 검증등 한다)

 

 

8. JWT구조

* JWT는 누구나 암호화된걸 알아볼 수 있도록 변환이 가능하다

* 하지만 Secret Key 가 없으면 JWT 수정 불가다.(시크릿키는 서버만 알고 있으니,만약 서버가 유출되면 수정가능이고)

* https://jwt.io/ 사이트등을 통해 JWT 암호화를 해석 할 수 있게 해준다.

'Spring' 카테고리의 다른 글

Spring_4주차-(2)  (0) 2023.11.14
Spring_4주차-(1)  (0) 2023.11.10
Spring_2주차-(2)  (0) 2023.11.02
Spring_2주차-(1)  (0) 2023.11.02
Spring_1주차-(2)  (0) 2023.11.01