TIL: 20254/05/27 - Spring (3)

White 와잇·2024년 5월 27일

TIL

목록 보기
26/40

Bean 수동 등록

@Component, @Service.. 등으로 등록하지 않는 Bean 등록
기술지원 Bean이라고 함

Bean으로 등록하려는 객체를 반환하는 메서드에 @Bean + 그 메서드가 속한 클래스에 @Configuration

  • 언제?
    메인 비즈니스 로직이 아닌 부가적인 기능들에 사용함
    서비스 공통적으로 사용되어 전역 등록이 필요한 상황이면? Bean 등록을 하면 좋은데 부가적인 기능이므로 수동등록(내가 등록 메서드를 작성)
    메인 서비스 로직에 사용되는 객체는 자동등록 권장

다형성에서 같은 타입 Bean 이름 선택방법

Bean이 객체를 가져올 때 검색하는 이름
Bean을 주입받을 때 클래스(타입)을 찾음(1순위)
변수 이름을 찾음(2순위)

  1. 변수 이름을 다르게 명시
  2. @Primary
  3. @Qualifier("value")

클라이언트 웹 브라우저에 쿠키저장소가 존재

클라이언트가 도메인 별로 사용되는 서비스에 필요한 작은 설정 값
쿠키마다 Name-Value, 도메인, 경로, 만료기한이 존재

Session 세션

서버에서 클라이언트와 통신할 때 각 클라이언트의 상태를 식별하기 위한 정보

각 클라이언트의 상태를 저장하므로 클라이언트 ID와 함께 저장됨

http 통신은 비연결통신이므로 세션으로 클라이언트의 연결을 표현

클라이언트에게 건네줄 때는 결국 쿠키로 전달(할 수 밖에), 세션 쿠키

클라이언트 브라우저 종료, 로그아웃, 타임아웃 셋 중 하나를 만족시 세션은 삭제됨

JWT

# 클레임기반
# 웹 토큰, Secret Key
# JSON
# 쿠키저장소에 저장(일반적인 방법)

토큰 구성은 Header, Payload, Signature로 구성됨

프로젝트 사용처: 클라이언트가 로그인 요청시 JWT 암호화하여 처리 (세션방법 X)

Spring mvc Filter

클라이언트와 서버가 http 통신할 때 서버 가장 바깥부분에서 주고받는 데이터를 원하는 정보로 가공(필터링)한 후 DispatchServlet에게 넘겨준다.

다시 정리하면, 본격적인 애플리케이션 서비스로 들어가기 전에 전처리작업 + 다 끝나고 후처리작업에 활용할 수 있는 기능

예시로 로그인과 같은 인증, 인가기능을 필터로 처리할 수 있겠다.

사용하려면 다음과 같이 Filter 인터페이스를 implement한다.
doFilter() 오버라이딩

코드 예시

@Component
@Order(1)
public class LoggingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 전처리 로직 작성
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        System.out.print(httpServletRequest.getRequestURI());

        chain.doFilter(request, response); // 다음 Filter 로 이동

        // 후처리 로직
    }
}

chain.doFilter로 필터 체이닝 가능
@Order(1)은 필터 체이닝 순서 1번째, @Order(2), ...

profile
웹개발 도전! 데브옵스 도전!

0개의 댓글