- [ 배경 ]
- 제가 기획한 서비스는 모든 기능을 로그인해야만 사용할 수 있었습니다.
- Used-Makret-Server 화면 프로토타입의 로그인 페이지는 다음과 같습니다.
- 물품을 등록하고 삭제하고 수정 및 기타 기능을 이용하려면 로그인을 해야 가능합니다.
- AOP를 적용하지 않은 상태에서는 로그인 체크 중복 코드가 발생하였습니다.
- AOP에 대한 정의가 궁금하신 분들은 제 블로그 글 중 AOP란? 게시글을 확인 부탁드립니다.
- [ 과정 ]
- AOP 적용 전 코드
- HttpSession에서 User id 정보를 가져온다.
- 가져온 id 정보가 없다면 HttpStatus 401 (해당 리소스에 유효한 인증 자격이 없음을 의미) 반환한다.
- id가 있다면 핵심 로직을 수행한 후 반환한다.
- AOP 적용 전 코드
- 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로 개발하였습니다.
- [ 성과 ]
- 중복 코드를 방지함으로써 재사용성이 좋아졌고 부가 로직과 핵심 비즈니스 로직을 구분 함으로써 유지 보수성이 좋아졌습니다.
- used-market-server 중고거래 프로젝트 코드는 아래에서 확인하실 수 있습니다.
'used-market-server Project' 카테고리의 다른 글
swagger 연동을 통한 자동 API 문서 생성하기 (0) | 2020.09.09 |
---|---|
i18n 설정과 Messagesource를 통한 다국어 처리 (0) | 2020.09.09 |
Log4j2 Logback Log4j 차이 및 적용 (0) | 2020.09.09 |
젠킨스 CI 적용하기 (ubuntu linux 18.04) (0) | 2020.09.09 |
대용량 트래픽 환경에서 게시글 검색시 캐싱 적용하기 (0) | 2020.09.09 |