⬜섹션11 스프링 AOP - 포인트컷◼️ AOP 개념포인트컷 표현식: 에스펙트J가 제공하는 포인트컷 표현식 실습 사전 준비- ClassAop, MethodAop, MemberService, MemberServiceImpl을 만든다. (상세 코드 in 교안)@Slf4jpublic class ExecutionTest { // AspectJExpressionPointcut; 포인트컷 표현식을 처리해주는 클래스 AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); Method helloMethod; @BeforeEach public void init() throws NoSuchMethodException { ..
🟢 기초 용어 정리노드: 네트워크에 연결된 하드웨어. 각 노드는 주소를 가지고있다. (ex_서버, 라우터, 스위치)라우터: 중간 노드가 되는 기기를 하며, 라우터는 IP패킷을 한 네트워크에서 다른 네트워크로 옮기는 역할을 한다.MAC주소: 네트워크에 사용되는 모드 기기가 지니고 있고 물리적으로 식별할 수 있는 각 기기의 고유 주소 패킷: 인터넷에서 두 디바이스가 정보를 주고받는 데이터 단위패킷 헤더: 패킷의 크기와 유형프로토콜: 기기가 인터넷에서 서로 어떻게 통신해야 하는지, 오류가 발생했을 때 무엇을 해야 하는지에 관한 규칙IP(Internet Protocol): 패킷을 어떻게 구성할 것인지, 패킷을 목적지까지 보낼 주소를 어떻게 지정할 것인지를 표준화하는 프로토콜네트워크 주소 변환(NAT, Netw..
⬛ 출금 예제로 보는 동시성 문제공유 자원: 여러 스레드가 접근하는 자원쓰레드 두개를 만들어 동시에 잔고가 천원인 계좌에서 동시에 돈을 출금하는 상황을 만들어보자.public class BankAccountV1 implements BankAccount { private int balance; //volatile private int balance; public BankAccountV1(int initialBalance) { this.balance = initialBalance;} @Override public boolean withdraw(int amount) { log("거래 시작: " + getClass().getSimpleName()); ..
⬜섹션9 스프링 AOP 개념◼️ AOP 개념앱의 기능은 핵심 기능과 부가 기능으로 나뉜다. 로깅처럼, 보통 부가 기능은 여러 클래스에 걸쳐서 함께 사용된다. 이러한 부가 기능은 횡단 관심사(cross-cutting concerns)이다. 🟢 AOP 탄생 과정부가 기능을 적용할 때 반복과 중복 코드가 많이 발생하고, 수정 시에도 많은 작업이 필요했음이를 해결하기 위해 @Aspect를 사용해 부가 기능과 적용 범위를 정의이렇게 Aspect를 사용하는 프로그래밍 방식을 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)이라 하며, AOP는 객체 지향 프로그래밍(OOP)을 보완하여 횡단 관심사를 깔끔하게 처리하기 위해 개발됨◼️ AOP 적용 방식🟢 AOP 부가 기능 로직 추가 ..
⬜섹션8 @Aspect AOP◼️@Aspect 프록시 🟢 스프링 프록시 적용 방법Advisor(포인트컷 + 어드바이스) 를 스프링 빈으로 등록자동 프록시 생성기가 스프링 빈으로 등록된 어드바이저를 찾음스프링 빈에 프록시 적용결국 우리가 할 일은 단순히 위 1번 과정이다. @Aspect 는 편리한 어드바이저 생성 기능을 지원한다.자동 프록시 생성기( AnnotationAwareAspectJAutoProxyCreator )는 @Aspect를 찾아 이것을 Advisor로 만들어 준다. 🟢 자동 프록시 생성기가 하는 일@Aspect를 보고 Advisor로 변환해서 저장어드바이저를 기반으로 프록시 생성자동 프록시 생성기는 모든 @Aspect 빈 조회 후, @Aspect 어드바이저 빌더를 통해 어드바이저를 생성..
⬜섹션7 빈 후처리기◼️빈 후처리기빈 후처리기(BeanPostProcessor)는 생성객체를 빈 저장소에 등록하기 직전 조작할 수 있다.이를 사용하려면 아래 인터페이스를 구현후, 스프링 빈으로 등록하면 된다.🔶 BeanPostProcessor 인터페이스 public interface BeanPostProcessor { // 객체 생성 이후, @PostConstruct 같은 초기화 발생 전 호출되는 포스트 프로세서 Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException // 객체 생성 이후, @PostConstruct 같은 초기화 발생 후 호출되는 포스트 프로세서 ..
⬜섹션6 스프링이 지원하는 프록시◼️프록시 팩토리🤔 문제점인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 InvocationHandler, MethodInterceptor를 각각 중복으로 만들어서 관리해야 하는 번거로움이 있다.😉 해결책 프록시 팩토리는 동적 프록시를 통합해서 편리하게 만들어준다. 인터페이스는 JDK 동적프록시를, 구체클래스는 CGLIB을 사용한다.추가 설정도 가능하다. 🟢프록시 팩토리Advice는 프록시에 적용하는 부가 기능 로직이다.JDK 동적 프록시의 InvocationHandler,CGLIB의 MethodInterceptor 개념과 유사하다.프록시 팩토리를 사용하면 둘 대신 Advice를 사용하면 된다.Advice를 만드..
⬜섹션5 동적 프록시 기술◼️리플렉션리플랙션을 사용해 클래스나 메서드 메타정보를 사용해서 동적으로 호출하는 메서드를 변경할 수 있다.아래 코드 를 보면, 중복되는 부분이 나타난다. 중복부분을 제거하려면 메서드로 뽑아서 공통화 해야 한다. 하지만 중간 호출 메서드가 다르다. 🔶중복이 많은 코드@Slf4jpublic class ReflectionTest { @Test void reflection0() { Hello target = new Hello(); //공통 로직1 시작 log.info("start"); String result1 = target.callA();//호출 메서드가 다름 log.info("result={}", resu..
⬛ 데몬 스레드사용자 스레드(non-daemon 스레드)프로그램의 주요 작업을 수행한다. 작업이 완료될 때까지 실행된다.모든 user 스레드가 종료되면 JVM도 종료된다.데몬 스레드백그라운드에서 보조적인 작업을 수행한다.모든 user 스레드가 종료되면 데몬 스레드는 자동으로 종료된다.JVM은 데몬 스레드의 실행 완료를 기다리지 않고 종료된다. 데몬 스레드가 아닌 모든 스레드가 종료되면, 자바 프로그램도 종료된다.setDaemon(true)로 설정 가능하다.⬛ 스레드 로거public class MyLogger { private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSS"); public ..
나자신아 졸작을 시작해!!!!!!!!!이제 교수님께 메일보내고 졸업작품을 해야한다!!!!!!!!!제발 주제 고민좀그만해 이제뭐라도 시작해 다음주 무조건 시작한다 으아아갖잖은 완벽주의 성향을 버리자 ,,매일의식적으로 되새기려해도 쉽지않다그리고 공부도 진짜 쫌쫌따리라도 꾸준히 쪼금이라도 시간을 내어서 의식적으로ㅠㅠ하자아니왜 쉬는데도할일이많은것같지??????!!!뭐 할거하면 시간이 푹푹가네... 막말로 심심을 견디지못해 공부좀하면 진짜 시간이 5시간 순삭..나 뭐 고민만하고 해결한게없는데진짜뭐지요리하면 설거지까지 2시간은 순삭운동해도 샤워까지 최소 2시간 순삭그와중에 잠은 또많고 흐어 그래도 한달동안 진짜 푹잘쉬었다 너무 잘쉬어서 아무후회없다푹삶은 빚살좋은 감자가된느낌 아주좋다 !ㅎㅎ이제달려야지슬프게도 나는 ..