• [ 배경 ]
    • 제가 기획한 서비스는 모든 기능을 로그인해야만 사용할 수 있었습니다.
    • Used-Makret-Server 화면 프로토타입의 로그인 페이지는 다음과 같습니다.

  • 물품을 등록하고 삭제하고 수정 및 기타 기능을 이용하려면 로그인을 해야 가능합니다.
  • AOP를 적용하지 않은 상태에서는 로그인 체크 중복 코드가 발생하였습니다.
  • AOP에 대한 정의가 궁금하신 분들은 제 블로그 글 중 AOP란? 게시글을 확인 부탁드립니다.

  • [ 과정 ]
    • AOP 적용 전 코드
      • HttpSession에서 User id 정보를 가져온다.
      • 가져온 id 정보가 없다면 HttpStatus 401 (해당 리소스에 유효한 인증 자격이 없음을 의미) 반환한다.
      • id가 있다면 핵심 로직을 수행한 후 반환한다.
  •  AOP 적용 구상도

  •  SessionUtil (세션 체크용 공통 모듈)
  • 유저 자신의 중고 물품 조회 코드
    • 자신의 중고물품 조회시 똑같은 로그인 검사 코드가 반복됩니다.
    • Spring에서 제공하는 AOP 기능을 통해 로그인 체크를 어노테이션으로 만들어 자동으로 동작하도록 변경해보겠습니다.
  • @LoginCheck 어노테이션에 UserType 중 일반 유저와 관리자 유저를 구분합니다.
  • Runtime시에 로그인 체크를 주입할 예정으로 @Retention(RetentionPolicy.RUNTIME)으로 설정합니다.
  • spring에서 제공하는 AOP기능을 사용하기 위해 spring-boot-starter-aop 의존성을 추가합니다.
  • @LoginCheck 어노테이션이 사용된 곳에 로그인 여부를 검사하기 위해 LoginCheckAspect 클래스에 @Aspect 어노테이션을 붙여 어드바이스 메서드를 작성합니다.
  • 스프링 빈이 메서드 호출시에 @Before, @After, @AfterReturning, @AfterThrowing, @Around 등의 순서를 정할 수 있습니다.
  • 실제 @LoginCheck 어노테이션의 type에 따라 일반 유저, 관리자 유저 인지 확인 후 id값을 JoinPoint의 Argument에 설정하여 이후 핵심 비즈니스 로직을 수행합니다.
  • 유저 자신의 중고물품 검색을 할때 @LoginCheck 어노테이션을 이용해 일반 유저인지 검사 후 맞다면 자신의 중고 물품들을 조회하는 API입니다.

  • [ 결과 ]
    • 세션 정보를 저장 하고 가져오는 모듈을 만든 후 Spring의 AOP 의존성을 추가하고 로그인 체크하는 중복 메서 드를 Advice로 개발하였습니다.

  • [ 성과 ]
    • 중복 코드를 방지함으로써 재사용성이 좋아졌고 부가 로직과 핵심 비즈니스 로직을 구분 함으로써 유지 보수성이 좋아졌습니다.

 

junshock5/used-market-server

중고거래 프로젝트. Contribute to junshock5/used-market-server development by creating an account on GitHub.

github.com

+ Recent posts