SpringBoot Meteor
-
[Spring Boot] AOP JoinPoint & 바인드 변수SpringBoot Meteor 2021. 12. 29. 16:33
프로젝트를 진행하다가 보면 *관점 지향 프로그래밍을 구현해야할 때가 발생할 수 있다. *AOP - Aspect Oriented Program (관점 지향 프로그래밍) 관점지향프로그래밍이란 , 핵심 기능과 공통 기능을 분리하는 것이다. 예를 들어 회원가입을 진행하고 로그인을 진행할 때 파라미터 값들의 유효성 검증 해당 비지니스 로직 이렇게 나누어 볼 수 있다. 회원가입 , 로그인에서는 파라미터 값들의 유효성 검증은 공통 기능에 해당할 것이다. 실질적으로 회원가입의 데이터를 DB에 저장시키고, 로그인 되어질 정보를 DB에서 가져와 검증하는것이 핵심 기능이라고 볼 수 있다. 관점지향적 프로그래밍을 함으로써 핵싱 기능과 공통 기능을 분리한다. ex ) 회원 가입 유효성 검사 세션 체크 로그 남기기 등등... 포..
-
[Spring Boot] AOP JoinPoint & 바인드 변수SpringBoot Meteor 2021. 12. 29. 16:32
프로젝트를 진행하다가 보면 *관점 지향 프로그래밍을 구현해야할 때가 발생할 수 있다. *AOP - Aspect Oriented Program (관점 지향 프로그래밍) 관점지향프로그래밍이란 , 핵심 기능과 공통 기능을 분리하는 것이다. 예를 들어 회원가입을 진행하고 로그인을 진행할 때 파라미터 값들의 유효성 검증 해당 비지니스 로직 이렇게 나누어 볼 수 있다. 회원가입 , 로그인에서는 파라미터 값들의 유효성 검증은 공통 기능에 해당할 것이다. 실질적으로 회원가입의 데이터를 DB에 저장시키고, 로그인 되어질 정보를 DB에서 가져와 검증하는것이 핵심 기능이라고 볼 수 있다. 관점지향적 프로그래밍을 함으로써 핵싱 기능과 공통 기능을 분리한다. ex ) 회원 가입 유효성 검사 세션 체크 로그 남기기 등등... 포..
-
[Spring Boot] AOP pointcut post, put 어노테이션에 적용하기 (pointcut 여러개)SpringBoot Meteor 2021. 12. 29. 16:30
@Component @Aspect public class ValidationAdvice { @Pointcut("@annotation(org.springframework.web.bind.annotation.PostMapping)") public void postMapping(){} @Pointcut("@annotation(org.springframework.web.bind.annotation.PutMapping)") public void putMapping(){} @Before("postMapping() || putMapping()") public void apiAdvice(JoinPoint joinPoint){ Object[] args = joinPoint.getArgs(); for (Object arg..
-
[Spring Boot] Objects.requireNonNull 메서드SpringBoot Meteor 2021. 12. 29. 16:28
Objects 클레스에있는 매개변수 널 검사용 메서드 // 예시 코드 public void test(String message) { this.message = Objects.requireNonNull(message); } message이 null이면 NullPointerException이 일어난다. 크게 개선된 것처럼 보이지 않는다. 하지만 스택 추적을 거슬러 올라가서 작업하는 방식을 생각해 보면 크게 개선되었다. requireNonNull 호출을 문제의 원인으로 보면 무엇을 실수했는지 바로 알 수 있기 때문 또 예외에 대응하는 메시지 문자열도 지정 가능하다. // 예외에 대응하는 메시지 this.direction = Objects.requireNonNull(message, “message must no..
-
[Spring Boot] @RestControllerAdvice를 이용해서 예외 처리 핸들링하기SpringBoot Meteor 2021. 12. 29. 16:27
@ControllerAdvice란? 간단하게 말해서 @ExceptionHandler, @ModelAttribute, @InitBinder가 적용된 메서드들을 AOP를 적용해 사용하기 위한 어노테이션 클래스에 선언해주면 되며, 모든 @Controller에 대한, 전역적으로 발생할 수 있는 예외를 잡아서 처리할 수 있다. @RestControllerAdvice란? @ResponseBody + @ControllerAdvice ⇒ @RestControllerAdvice @ControllerAdvice와 동일한 역할을 수행하고, 추가적으로 @ResponseBody를 통해 객체를 리턴할 수도 있다. 단순히 예외만 처리 하고 싶을 때 → @ControllerAdvice를 사용 예외처리 후 객체를 응답하고 리턴해주고 ..
-
[Spring Boot] JWT (JSON WEB TOKEN) 간단 정리SpringBoot Meteor 2021. 12. 23. 14:58
JWT가 무엇이고 어떻게 사용되는 것 인가 ? 세션 서버가 가지고있는 세션 영역 세션영역의 값이 비워지는 경우 session (서버쪽에서 session값을 날리는 경우) 사용자가 모든 브라우저를 다 닫을 때 세션의 단점 요청이 많으면 부하가 걸림 ⇒ 로드밸런싱으로 서버를 나누어서 요청을 처이함 ⇒ 1번2번3번 서버의 세션이 다 다르기때문에 1버서버세엇 인증을 받은 값이 2번서버에서는 안먹힐 수 있다. ⇒ 세션값을 DB에 저장 (io 발생 성능 저하 속도 엄청 느림) 모든 서버가 DB에서 세션값을 가져옴 (성능 저하) 네트워크 : IP ㅡㅡㅡㅡㅡㅡㅡㅡLANㅡㅡㅡㅡㅡㅡㅡㅡ 로컬 통신 근거리 통신 데이터링크 : 어떤 ..
-
[Spring Boot] 시큐리티 회원가입시 추가정보 미기입 상태 분기처리SpringBoot Meteor 2021. 12. 23. 14:56
개발을 하면서 기존 시큐리티 OAuth2.0을 이용하여 카카오 로그인을 하고 추가 정보를 입력하는거 까지 회원 가입 완료 스텝으로 보는 상황이었다. 그런데 문제점이 로그인 상태가 먼저 되기때문에 추가 정보를 기입하지않고 다른 페이지로 이동하면 로그인 처리가 완료되어 인가 상태가 되어버렸기 때문에 추가적인 로직이 필요했다. 처음에는 AOP를 이용하여 처리를 하려했으나 모든 회원(추가 정보 입력도 완료)이 모든 요청시마다 해당 로직을 타는게 맞는지에 대한 얘기가 나왔고 다른 해결방법으로 처음에 가입할 때 주던 ROLE_USER권한을 ROLE_TEMP라는 권한타입을 하나 추가하고 추가 가입까지 완료 되어야 ROLE_USER권한을 주었다. 기존 시큐리티 설정 @RequiredArgsConstructor @Ena..
-
[Spring Boot] Spring Security 시큐리티 권한 업데이트 시 동적 적용SpringBoot Meteor 2021. 12. 21. 13:31
관리자 페이지에서 회원에 따른 권한을 변경하였을 때 재 로그인을 하지 않더라도 변경된 권한이 적용되어 권한이 걸린 경로로 접근하는 것을 막고 싶을 때 (로그아웃을 시킨뒤에 다시 로그인 플로우를 진행하게되면 사용자의 불편함이 예상, 그리고 권한이 바뀐 이후의 시점에도 로그아웃(세션을 끊음)을 하지않는다면 로그아웃 이전까지의 권한이 유지됨) 최초 로그인 시에 SpringSecurity가 계정 정보를 관리할 수 있도록 Authentication객체를 만들어준다. 이 Autentication객체 안에는 로그인 시점의 계정 정보를 담고 있다. 사용자의 권한이 변경 또는 추가가 되어도 update된 정보에 대해서는 Authentication객체에는 현행화(동기화)가 되지않았기 때문이다. 즉, Security가 게정..