Lined Notebook

[백견불여일타 스프링 부트 쇼핑몰] 03. Spring Security

by ymkim

Spring Security 의존성 추가만해도 모든 요청에 대한 인증이 필요함

01. UserDetailService

  1. UserDetailService 인터페이스DB에서 회원 정보를 가져오는 역할 담당
  2. loadUserByUserName() 메서드가 존재, 회원 정보를 조회하여 사용자의 정보와 권한을 갖는 UserDetail 인터페이스를 반환한다
  3. 스프링 시큐리티에서 UserDetailService를 구현하고 있는 클래스를 통해 로그인 기능을 구현한다고 생각

02. UserDetail

  1. 스프링 시큐리티에서 회원의 정보를 담기 위해서 사용하는 인터페이스는 UserDetail
  2. 해당 인터페이스를 직접 구현하거나 스프링 시큐리티에서 제공하는 User 클래스를 사용한다
  3. User 클래스는 UserDetail 인터페이스를 구현하고 있는 클래스

03. 로그인/로그아웃 구현하기

  1. 로그인 기능 구현을 위해 기존에 만들었던 MemberService가 UserDetailService를 구현하도록 수정

04. 기타 사항 기재

  1. classpath
    1. Spring Boot에서 classpath는 애플리케이션을 실행할 때 클래스 파일, 프로퍼티 파일, 리소스 파일 등을 찾을 때 사용되는 경로를 나타낸다
      1. class 파일을 포함하는 bin 디렉토리
      2. src/main/resources 디렉토리의 리소스 파일
      3. Maven의 경우 Maven Dependency에 있는 라이브러리 파일
  2. @AutoConfigureMockMvc
    1. Mock 테스트시 필요한 의존성을 제공하는 어노테이션
  3. MockMvc
    1. 애플리케이션 서버의 구동 없이 Spring MVC 동작을 재현할 수 있는 모의(가짜) 객체
    2. spring-boot-starter-test 라이브러리에 MockMvc가 포함되어 있음
    3. MockMvc를 사용하기 위한 방법
      1. @SpringBootTest + @AutoConfigureMockMvc 조합으로 사용
        1. @SpringBootTest
          1. 통합 테스트시에 사용하는 어노테이션 (모든 빈을 로드, 리소스 많이 먹음)
        2. @AutoConfigureMockMvc
          1. Mock 테스트시 필요한 의존성을 제공하는 어노테이션
          2. @Controller외에도 @Service @Repository 붙은 객체들까지 모두 메모리에 올림
      2. @WebMvcTest + MockBean 조합으로 사용
        1. 컨트롤러 역할만을 테스트
        2. Web Layer에 해당하는 빈만 빠르게 생성
          1. Security, Filter, Interceptor, Request/Response Handling, Controller 등
          2. @Component 등록하지 않기에 필요한 빈은 직접 의존성 주입 해주어야 함
          3. 테스트가 훨씬 빠름
        3. 통합 테스트에서 진행이 어려운 경우를 Mock으로 테스트 가능
        4. Mock 객체를 사용, 실제 동작과 차이가 있음
        5. Mocking 메서드 변경 시 수정 필요

[Spring] MockMvc 테스트

SpringBoot - @SpringBootTest vs @WebMvcTest

블로그의 정보

기록하고, 복기하고

ymkim

활동하기