~23-06-25 WIL

more·2023년 6월 25일
0

배운 점

  • Bean 수동 등록
    • 보통 Bean으로 등록해서 Spring Boot에 객체를 주입받아 사용하겠다고 할 경우, @Service, @Controller, @Component등의 Annotation을 붙여서 사용하였는데, 그냥 @Bean이라고 하면 바로 Bean 객체로 등록이 된다.
      -> 이거를 먼저 배웠어야했다 라는 느낌(?) 이 든다.
    • 스프링은 Bean을 조회시 타입 > 이름 순으로 조회
    • 같은 타입의 Bean이 두 개 이상일 경우 (extends 해서 상속받아 사용할 경우), @Primary나 @Qualifier 같은 Annotation을 사용해서 우선순위를 정할 수 있다. @Qualifier가 @Primary보다 우선순위가 위이고, 보통 더 넓은 범위로 사용되는 Bean의 우선순위를 낮게 설정한다.
      -> 그럼 Primary가 여러개 라면? => NoUniqueBeanDefinitionException 발생
      -> Qualifier 말고 직접 Annotation을 만들어서 사용하는 방법도 있다 (@Qualifier("first") 처럼 문자 입력시 컴파일 시점에 체크되지 않기 때문)
  • 쿠키와 세션
    • HTTP 에 상태 정보를 유지(Stateful)하기 위해 사용되는 값 (쿠키 : 브라우저에 저장, 세션 : 웹 서버에 저장)
      -> 클라이언트 별로 인증 및 인가를 할 때에 사용된다.
  • JWT
    • JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token (토큰의 한 종류)
    • 로그인 정보를 Server 에 저장하지 않고, Client에 JWT 로 암호화하여 저장
      -> Secret Key를 사용하기 때문에 따로 세션 저장소가 필요 없음
    • 로그인 시, 서버에서 로그인 정보를 JWT 로 암호화 (Secret Key 사용) > 서버에서 직접 쿠키를 생성해 JWT를 담아 Client 응답에 전달 > 브라우저 쿠키 저장소에 자동으로 JWT 저장
    • 인증 시, Client가 전달한 JWT 위조 여부 검증 (Secret Key 사용) > 유효 기간 검증
    • Filter
    • Web 애플리케이션에서 관리되는 영역으로 Client로 부터 오는 요청과 응답에 대해 최초/최종 단계의 위치 (가장 바깥에 있는 영역이라고 생각하면 좋을 듯, 껍질 정도?)
    • 로깅 및 보안 처리에 활용 (인증, 인가를 할 때에 필터를 사용하면 비즈니스 로직과 분리하여 관리할 수 있음)
    • 하나가 아니고 여러개가 chain 형식으로 되어있다.
      -> 존재하는 필터들을 모두 알거나 사용하기에는 아직 능력이 부족한 듯... 더 공부하고 사용해봐야겠음
  • Spring Security
    • Spring 서버에 필요한 인증 및 인가 등의 기능을 제공해주는 프레임워크
    • 기본적으로 제공해주는 default login 기능이 존재한다.
    • 인증 및 인가를 처리할 때에 필터를 사용한다.
      -> FilterChain 중, Delegating Filter Proxy의 Filter Chain Proxy안에 Security Filter Chain이 있는데 그 안의 UsernamePasswordAuthenticationFilter을 사용한다.
    • 인증 과정
      • 사용자가 username과 password를 제출하면 UsernamePasswordAuthenticationFilter는 인증된 사용자의 정보가 담기는 인증 객체인 Authentication의 종류 중 하나인 UsernamePasswordAuthenticationToken을 만들어 AuthenticationManager에게 넘겨 인증을 시도
      • 실패하면 SecurityContextHolder를 비움
      • 성공하면 SecurityContextHolder에 Authentication를 세팅
    • Authentication : 현재 인증된 사용자, SecurityContext에서 가져올 수 있다.
      • principal : 사용자를 식별
        • Username/Password 방식으로 인증할 때 일반적으로 UserDetails 인스턴스
      • credentials : 주로 비밀번호, 대부분 사용자 인증에 사용한 후 비움
      • authorities : 사용자에게 부여한 권한을 GrantedAuthority로 추상화하여 사용
  • Validation
    • null과 같은 여러가지 오류를 예방하기 위한 검증 과정
    • 스프링에서는 여러가지 Bean Validation을 제공
      • @NotNull : null 불가
      • @NotEmpty : null, “” 불가
      • @NotBlank : null, “”. “ “ 불가
      • @Size : 문자 길이 측정
      • @Max : 최대값
      • @Min : 최소값
      • @Positive : 양수
      • @Negative : 음수
      • @Email : E-mail 형식
      • @Pattern : 정규 표현식 (형식을 지정할 수 있음)

느낀 점

  • 이번 주도 엄청 다양한 스프링의 기능들, 기본적인 웹을 구성하는 요소들을 많이 보았다.
  • 본 느낌이지 그것이 다 이해가 가거나 체화되었다고 말은 못하겠음
    -> 여러 번의 복습, 다른 강의와 책들도 보면서 공부해야겠다.

0개의 댓글