반응형 Spring91 Authentication 아키텍쳐 *개요Authentication(인증) 아키텍처 공식문서를 확인합니다.자세한 내용은 Servlet Authentication Architecture에서 확인 가능합니다.(5.6.13-SNAPSHOT 기준) SecurityContextHolder 스프링 시큐리티 인증 모델의 핵심은 SecurityContextHolder입니다. 인증 정보들을 저장하는 장소입니다. 스프링 시큐리티는 SecurityContextHolder가 어떻게 채워지는지 관심이 없습니다. 값이 있다면, 인증된 사용자로 활용합니다. 즉, 사용자 인증을 구현하려면 SecurityContextHolder에 직접 인증정보를 넣습니다. SecurityContext context = SecurityContextHolder.createEmpty.. 2024. 5. 21. Spring Security 구조 메커니즘 *개요 Spring Security의 구조 메커니즘을 학습합니다. 스프링 라이브러리와 서블릿 컨테이너의 필터가 어떻게 서로 연결되어 동작하는지 학습합니다. 필터 리뷰 스프링 시큐리티의 서블릿 지원은 서블릿 Filter에 기반을 둡니다. 아래 사진은 HTTP 요청 시 핸들러의 계층입니다. 만약 사용자는 어플리케이션에 요청을 보내면 컨테이너는 FilterChain을 생성합니다. FilterChain은 Filter와 Servlet으로 이루어졌으며 URL 요청에 따라 HttpServletRequest를 수행합니다. FilterChain은 이름대로 여러 개의 필터를 체인 형태로 가질 수 있는데 순서대로 아래 방향으로 실행되면서 Filter와 Servlet의 호출을 진행하거나 막을 수 있고 HttpServletR.. 2024. 5. 17. Security AccessDecisionManager 구현 학습하기 *개요Spring Security Authorization 구현 학습으로 좋은 설계를 확인합니다.본 내용은 Spring Security Authorization Architecture를 기반으로 작성하였습니다.(1) 추상골격 구현, (2) 인터페이스 합성 의존, (3) OCP 구현을 알아보겠습니다. Voting-Based AccessDecisionManager Implementations 투표 기반의 권한 검사는 AccessDecisionManager가 담당하며 AbstractSecurityInterceptor에 의해 호출됩니다. AccessDecisionManager 구현체의 "투표"를 활용해 사용자의 자원 접근 권한을 통제할 수 있습니다. decide() 구현이 핵심입니다. 권한 심사를 통과.. 2024. 5. 15. 스프링 AOP (3) - 실무 주의사항 프록시 내부호출 문제 스프링은 프록시 방식의 AOP를 사용합니다. 따라서 AOP를 적용하려면 항상 프록시를 통해서 대상객체(Target)을 호출해야 합니다. 그래야 어드바이를 통해서 정상적으로 호출되며 직접 호출하면 어드바이스가 적용되지 않습니다. 하지만, 대상 객체(Target) 내부에서 메서드 호출이 발생하면 프록시를 거치지 않아 직접 호출을 하고 제대로 AOP가 적용되지 않습니다. @Aspect public class CallLogAspect { @Before("execution(* hello.aop.internalcall..*.*(..))") public void doLog(JoinPoint joinPoint) { log.info("aop={}", joinPoint.getSignature()); .. 2023. 2. 2. 스프링 AOP (2) - AOP 구현 및 예제 개요 스프링 AOP (1) 편에서는 JDK 동적 프록시, CGLIB와 스프링 프록시, 빈 후기처리를 통해 프록시의 생성과정 및 작동 방법에 대해 배웠습니다. 이번에는 스프링에서 AOP의 개념 및 사용법에 대해서 알아보겠습니다. AOP(Aspect Of Programming)이란? AOP의 Aspect는 '관점'이라는 뜻으로 AOP는 이름 그대로 애플리케이션에서 기능 하나하나를 횡단 관심사의 관점으로 보는 것입니다. AOP는 OOP 지향 프로그래밍에서 횡단 관심사를 깔끔하게 처리하기 위해 등장했습니다. 핵심 기능과 분리하여 공통의 부가 기능들을 AOP에 정의합니다. 이를 Aspect라 하며 스프링에서 제공하는 advisor는 advice(부가 기능 정의)와 pointcut(어디에 적용 할 것인가)을 가지고.. 2023. 1. 12. 트랜잭션 전파 전략 7개 트랜잭션 전파 전략 7개 트랜잭션 전파 전략은 총 7가지가 있습니다. REQUIRED, REQUIRES_NEW, NESTED, MANDATORY, NEVER, SUPPORTS, NOT SUPPORTED를 하나씩 알아보겠습니다. REQUIRED 종속 된 트랜잭션은 현재의 트랜잭션을 따라갑니다. 만약에 현재 트랜잭션이 없다면 새로운 트랜잭션을 만듭니다. 트랜잭션 어노테이션의 기본 설정이기도 합니다. 트랜잭션 기본 설정입니다. 기존 트랜잭션 있음 : 기존 트랜잭션에 참여합니다 기존 트랜잭션 없음 : 트랜잭션 없이 진행합니다 REQUIRES_NEW 종속된 트랜잭션은 언제나 새로운 트랜잭션을 만들고 만약에 트랜잭션이 존재한다면 현재 트랜잭션을 잠시 지연시킵니다. 실제 트랜잭션 지연이 모든 트랜잭션 매니저에서 발생.. 2022. 12. 3. 스프링 트랜잭션 이해 개요 스프링 트랜잭션의 적용 위치, 옵션 AOP 주의 사항을 학습합니다. @Transactional 동작 확인하기 @Transactional으로 프록시 방식의 AOP를 이용한 트랜잭션 작동은 아래와 같습니다. 트랜잭션 시작 시 트랜잭션 매니저는 데이터 소스에서 커넥션을 만들고 트랜잭션 동기화 매니저에 커넥션을 보관합니다. 트랜잭션 로직을 처리할 때 트랜잭션 동기화 매니저에 보관된 커넥션을 사용하고, 트랜잭션을 모두 종료시키고 커넥션을 반납합니다. 스프링에서 선언적 트랜잭션인 @Transactional를 예시 코드로 설명하겠습니다. @Slf4j @SpringBootTest public class TxBasicTest { ... @Test void txTest() { basicService.tx(); bas.. 2022. 12. 1. 스프링 트랜잭션 추상화, 동기화 개요 스프링 트랜잭션의 추상화, 동기화를 이해할 수 있다. 트랜잭션 추상화 JDBC를 사용하다가 JPA로 기술을 변경하면 어떻게 될까요? JDBC 종속적인 수많은 코드들을 JPA로 변경해야 합니다. 그러다가 JPA가 또 다른 기술로 변경되면 어떻게 될까요? 해당 기술에 맞춰서 수많은 변경을 해야 합니다. 아래는 트랜잭션을 사용하는 JDBC 코드와 JPA 코드 비교입니다. 라이브러리가 완전히 바뀝니다. //JDBC public void accountTransfer(String fromId, String toId, int money) throws SQLException { Connection con = dataSource.getConnection(); try { con.setAutoCommit(false);.. 2022. 11. 30. 스프링 트랜잭션 전파 기본개념 개요 데이터베이스의 트랜잭션 고립 수준에 대해 공부하다가 스프링에서 트랜잭션이 부모와 자식 사이에 전파가 된다는 사실을 알았습니다. 여러 가지 전파 수준이 있는데, 수준에 따라서 어떻게 결과가 달라지는지 궁금해서 테스트를 통해 알아보도록 하겠습니다. 트랜잭션 커밋과 롤백 트랜잭션 시작 시 Hikari에서 커넥션(Connection)을 가져오고 커밋을 하면 Hikari에 커넥션을 반납합니다. 또한, 롤백도 마찬가지로 반영된 내용을 모두 롤백하고 Hikari에 커넥션을 반납합니다. 만약에 아래 코드처럼 첫번째 트랜잭션이 커밋되고, 두번째 트랜잭션이 롤백된다면 트랜잭션 사용은 어떻게 될까요? @Test void double_commit() { log.info("트랜잭션1 시작"); TransactionStat.. 2022. 11. 17. 이전 1 2 3 4 ··· 11 다음 반응형