전체 글 313

포인트컷 지시자의 종류

포인트컷 표현식은 `execution` 같은 포인트컷 지시자(Pointcut Designator)로 시작한다. 줄여서 PCD라 한다. 포인트컷 지시자의 종류 `execution` : 메소드 실행 조인 포인트를 매칭한다. 스프링 AOP에서 가장 많이 사용하고, 기능도 복잡하다. `within` : 특정 타입 내의 조인 포인트를 매칭한다. @Test void withinExact() { pointcut.setExpression("within(hello.aop.member.MemberServiceImpl)"); assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue(); } @Test void withinStar() { pointcu..

개인공부 2024.01.09

jdk동적프록시

jdk동적프록시는 인터페이스를 가지고 만든다. @Test void dynamicA() { AInterface target = new AImpl(); TimeInvocationHandler handler = new TimeInvocationHandler(target); // newProxyInstance()의 파라미터1= 어느 프록시를 어느 클래스 로더에할지. 파라미터2= 어떤 인터페이스를 기반으로 프록시를 만들지. 파라미터3= 프록시가 사용해야할 로직. AInterface proxy = (AInterface) Proxy.newProxyInstance(AInterface.class.getClassLoader(), new Class[]{AInterface.class}, handler); proxy.call(..

개인공부 2024.01.03

P와 NP

우리가 보통 사용하는 컴퓨터에서 다항식 시간안에 해법을 찾을 수 있는 알고리즘이 있으면 P이고, 우리가 보통 사용하는 컴퓨터에서 누군가 답을 주면 그 답을 검증할 수 있는게 NP이다. 즉 P와 NP는 대응 관계가 아닌 NP안에 P도 들어가 있다. NP완전이란 NP중에 하나인데 다른 np문제를 np완전문제로 환원을 해서 np완전문제로 해결을 할 수가 있다. 그래서 np중에 가장 어려운문제가 np완전문제이다. 현재까지는 np완전문제를 다항식 시간안에 풀수없다고한다. (검증만 가능) 그렇기 때문에 np와 p는 같지 않다. p 는 다항식 시간안에 풀수 있음 걔는 NP 어떤문제는 다항식 시간안에 풀수 없다. 결정론적 튜링기계. 하지만 검증이 다항식 시간에 된다면 걔는 NP문제이다. 그래서 포함관계이다.

Algorithm 2023.09.05

security 요청 설정

authorizeRequests() : 요청에 대한 권한 지정. Security 처리에 HttpServletRequest를 이용한다는 것을 의미한다. antMatchers() : 특정 경로를 지정합니다. 보통 뒤에 다른 메서드가 붙습니다. anyRequest() : 설정한 경로 외에 모든 경로를 뜻합니다. authenticated() : 인증된 사용자만이 접근할 수 있습니다. permitAll() : 어떤 사용자든지 접근할 수 있습니다. hasRole() : 특정 ROLE을 가지고 있는 사람이 접근할 수 있습니다. hasAuthority() : 특정 권한을 가지고 있는 사람만 접근할 수 있습니다. hasRole과 비슷하다고 볼 수 있습니다. csrf() : CSRF 보안에 대한 설정입니다. 아무 설정도 ..

개인공부 2023.07.08

JDK동적 프록시

@Test void dynamicA() { AInterface target = new AImpl(); TimeInvocationHandler handler = new TimeInvocationHandler(target); // 프록시를 호출하는 로직 // jdk에서 지원하는 프록시 생성기술(newProxyInstance를 하면 동적으로 생성된다.) 파라미터를 살펴보면. 1.프록시가 어디에 생성될지 지정 2.어떤 기반의 프록시를 만들지 지정 3.프록시가 사용할 로직 // 클래스로더를 지정해주는 이유는 자바는 클래스가 호출되면 클레스로더에 올라가게 되는데 그 위치를 지정해주기 위함이다. AInterface proxy = (AInterface) Proxy.newProxyInstance(AInterface.cl..

스프링강의 2023.06.20

초기화 시점에 트랜잭션적용

@PostConstruct를 사용해서 빈이 초기화 된 후에 실행하고 싶은 초기화 메서드에 트랜잭션을 적용하고 싶다. @PostConstruct @Transactional public void initV1() { boolean isActive = TransactionSynchronizationManager.isActualTransactionActive(); log.info("Hello init @PostConstruct tx active={}", isActive); } 하지만 이건 트랜잭션이 적용되지 않는다. 이유는 @PostConstruct가 먼저 실행되고 @Transactional이 실행되어서 초기화 코드에는 @Transactional이 적용되지 않기 때문이다. 순서가 맞지 않아서 적용이 안되는것. 해..

스프링DB 2023.06.01