본문 바로가기
반응형

분류 전체보기714

TIL_211018 1. Facts(사실, 객관) - 쿼리로 데이터 뽑아주기 - FETCH JOIN 사용해서 토이 프로젝트 개선 2. Feelings(느낌, 주관) - 현업에서 부쩍 쿼리요청이 늘었습니다. 혼자서 쿼리를 짜는 연습을 할때보다, 확실히 현업에 들어온 요청으로 쿼리를 짜주는 실전에서 많이 배웁니다. 요청이 올때마다 join을 통해서 새로운 조건을 추가합니다. 또한 단순히 join 뿐만 아니라 데이터를 보여주는 과정에서도 NVL이나 CASE 문을 활용하여 데이터를 정제했습니다. 여러 건을 합칠 때에는 LISTAGG도 사용했습니다. 이러다보니 JOIN에서 INNER와 OUTER조인을 좀 더 깊이 이해했습니다. 이전에 토이프로젝트를 하면서 얕게 배운 FETCH JOIN이 생각나서 내부 로직을 확인하니 INNER JO.. 2021. 10. 18.
TIL_211017 1. Facts(사실, 객관) - 권한 위원회 voter 강의 및 정리 2. Feelings(느낌, 주관) - 권한 위원회 voter에 대해 공부했습니다. voter 사용이 권한 검사에서 필수는 아니지만 많은 부분 voter로 구현되어 있기 때문에 알아보았습니다. 이전에 권한 위원회 소집에 대해서 공부하고 나니 이번에는 좀 더 친숙하게 봤습니다. Filter위원회와 글로벌 Method 위원회에 각각 voter로 투표하는 과정이 있다는 사실, 많은 부분이 이제 사용되지 않으며 SpEL로 대체되었다는 것을 알았습니다. 이전에 시큐리티를 사용하면 #를 사용한 비교들이 많았는데, SpEL을 지원하고 많이 사용하기 때문이라는 것을 알았습니다. 3. Findings (배운 점) - 권한 위원회 voter 정리 ht.. 2021. 10. 18.
권한위원회 voter 일반적으로 권한은 AccessDecisionManager이 담당하며, 역할은 인증이 완료된 사용자가 리소스에 접근하려고 할때 해당 요청을 허용할것인지 판단하는 인터페이스이다. AccessDecisionManager의 decide()만 구현하면 끝이난다. 꼭 Voter기반으로 할 필요는 없지만 Voter를 많이 사용하기 때문에 해당 방식의 원리를 알고 있는 것이 좋다. 인터페이스 구현체는 3가지를 제공한다. AccessDecisionManger 권한 위원회는 - AffirmativeBase :여러 Voter중에 하나라도 허용되면 허용된다. (기본설정) - ConsensesBased : 다수결 - UnaminousBased : 만장일치 3가지의 종류를 가지고 있다. public void decide(Auth.. 2021. 10. 17.
TIL_211016 1. Facts(사실, 객관) - 시큐리티 권한(Authorization) 강의 및 정리 2. Feelings(느낌, 주관) - 시큐리티 권한처리시, Filter와 Method에서 각각 어떻게 이루어지는 확인하였습니다. 생각보다 재미있던게 권한 위원회 소집, 투표, 제도선정 등 입니다. 해당 내용으로 시큐리티를 구성하고 메서드이름을 만드니 좀 더 친숙하고 쉽게 공부할 수 있었습니다. 또한 단순히 스프링 시큐리티 설정으로 경로들에 권한을 부여한 행동들이 어떤 내부적 로직을 따르는지 확인할 수 있었습니다. 이전에 그냥 사용했던 @PreAuthorize() 가 이제는 글로벌 Method Interceptor에서 처리된다는 사실도 알았습니다. 여러가지 expression기법도 공부할 예정이고 내용이 어렵다보니 .. 2021. 10. 16.
TIL_211015 1. Facts(사실, 객관) - 권한체크 오류처리 강의 및 정리 2. Feelings(느낌, 주관) - 권한체크와 오류처리를 공부했습니다. 이전에 개인프로젝트에서 로그인하지 않은 상태에서 이곳저곳 돌아다니면 403에러가 나는 것을 발견했었습니다. 그래서 그때는 그냥 403 에러로 접근금지 알림을 줬었는데, 왜 그렇게 동작하는지 원리를 파악할 수 있었습니다. 잘 생각해보면 단순히 로그인에서 아이디, 비밀번호만 확인할 것이 아니라 권한검사도 해야하기 때문에 복잡합니다. 따라서 스프링 시큐리티에서는 크게 인증검사 인가검사를 동시에 합니다. 그런데 신기한 것은 인가검사에 익명사용자와 rememberMe 사용자가 있다는 사실입니다. 해당 경우 로그인을 다시 하라는 페이지로 이동시키는 것이 부자연스러울 수 있으므.. 2021. 10. 16.
스프링 시큐리티의 권한(Authorization) AOP는 관심사가 같은 코드들끼리 묶는 역할을 한다. 서로 섞지 않고 분리한다. IT초기에는 스파게티 코드들이 많았는데 권한, 트랜잭션 코드들이 비지니스 로직과 모두 묶여 있었기 때문이다. 좋은 설계를 위해 트랜잭션, 로그, 권한처리 등등을 비지니스 로직에서 분리하는 고민이 있었고 그 결과 AOP 기술이 탄생하였다. 공통의 관심사를 어떻게 분리하는가? PointCut을 통해서 advice를 삽입한다. 코드를 서로 분리해두는데, 비지니스 로직의 적절한 곳에 권한, 로그 ,트랜잭션 커밋 등이 적용될 수 있도록 진입점을 가리켜 두는 것이다. SecurityFilterChain당 1개의 AccessDecisionManager가 있으며 Method 권한 판정은 하나의 Global 위원회에서 처리한다. 스프링 시큐.. 2021. 10. 15.
권한체크 오류처리 Interceptor 권한검사는 2곳에서 가능하다. FilterSecurityInterceptor 혹은 MethodSecurityInterceptor 이며 각각 필터, 메서드에서 검사한다. 해당 검사기능들이 Filter에 있는지 Method에 있는지에 따라서 작동하는 시점이 달라지는 것이다. 2가지 Interceptor의 역할과 차이점을 알아본다. *FilterSecurityInterceptor AccessDecisionManger는 권한검사를 하며 매우 중요한 역할이다. 그 아래에 AccessVoter들이 위원회를 소집해서 조사 및 투표를 하고 들어갈 수 있으면 투표를 하고 통과하지 못하면 AccessDenied를 한다. request .antMatchers("/").permitAll() .antMat.. 2021. 10. 15.
TIL_211014 1. Facts(사실, 객관) - sessionManagement 강의수강 및 정리 2. Feelings(느낌, 주관) - 스프링 시큐리티를 이용한 세션 세부설정을 공부했습니다. 항상 의문을 가지고 있던 것 중 하나가, 만약에 로그인이 여러군데에서 되면 어떻게 할 것인가? 어떻게 1개의 세션으로 제한할 수 있으며, 혹시 로그인을 하면 기존에 로그인을 제거시켜야하나 로그인을 애초에 막아야하나? 등등 스프링 시큐리티는 굉장히 쉽게 모든 것을 만들어 두었습니다. 또한 세션값은 기본적으로 고정되어 있지만, 로그인할때마다 세션id를 바꿀 수 있습니다. 로그인마다 세션값이 바뀐다면 세션이 탈취되더라도 좀 더 안전하게 방어할 수 있으므로 디테일하게 적용하면 좋다고 생각합니다. 3. Findings (배운 점) - s.. 2021. 10. 15.
세션관리 ( 동시접속 ) * ConcurrentSessionFilter ConcurrentSessionFilter의 동시에 접속하는 세션들에 관심이 많다. 주요 역할은 SessionRegistry에서 SessionInformation의 expired가 true인 토큰이 들어오지 못하도록 감시하고 막는 역할을 한다. (마치 동시접속 제어 효과를 누린다.) Tomcat과 같은 servlet-container에서 제공하는 Session을 Spring이 제어 할 수 없다. tomcat이 넘겨주는 세션을 SessionRegistry에서 관리한다. 특정 sessionId의 expired를 true로 마킹하면, 더이상 접근하지 못하도록 막는 역할을 한다. ConcurrentSessionFilter 클래스를 확인해서 작동방식을 알아본다. 위의.. 2021. 10. 14.
반응형