일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바의 정석 기초편 ch5
- 자바의 정석 기초편 ch12
- 자바의 정석 기초편 ch1
- 스프링 mvc2 - 타임리프
- 자바의 정석 기초편 ch4
- @Aspect
- 스프링 mvc2 - 로그인 처리
- jpa 활용2 - api 개발 고급
- 스프링 db1 - 스프링과 문제 해결
- jpa - 객체지향 쿼리 언어
- 스프링 입문(무료)
- 타임리프 - 기본기능
- 자바의 정석 기초편 ch14
- 게시글 목록 api
- 스프링 고급 - 스프링 aop
- 자바의 정석 기초편 ch3
- 자바의 정석 기초편 ch11
- 자바의 정석 기초편 ch9
- 2024 정보처리기사 시나공 필기
- 스프링 mvc2 - 검증
- 2024 정보처리기사 수제비 실기
- 자바의 정석 기초편 ch7
- 코드로 시작하는 자바 첫걸음
- 스프링 db2 - 데이터 접근 기술
- 자바의 정석 기초편 ch8
- 스프링 mvc1 - 스프링 mvc
- 스프링 mvc1 - 서블릿
- 자바의 정석 기초편 ch6
- 자바의 정석 기초편 ch2
- 자바의 정석 기초편 ch13
- Today
- Total
목록인프런 - 스프링 완전정복 코스 로드맵/스프링 핵심원리 - 고급편 (14)
나구리의 개발공부기록
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 프록시와 내부 호출 - 문제1) 문제점(1) 문제 설명스프링은 프록시 방식의 AOP를 사용하므로 AOP를 적용하려면 항상 프록시를 통해서 대상 객체(target)을 호출해야 프록시에서 먼저 어드바이스를 호출하고 이후에 대상 객체를 호출함만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고 어드바이스도 호출되지 않음AOP를 적용하면 스프링은 대상 객체 대신에 프록시를 스프링빈으로 등록하여 의존관계 주입시에 항상 프록시 객체를 주입함프록시 객체가 주입되기 때문에 대상 객체를 직접 호출하는 문제는 일반적으로 발생하지 않음그러나 대상 객체의 내부에서 메서..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 예제만들기1) 예제@Trace 애노테이션으로 로그 출력@Retry 애노테이션으로 예외 발생시 재시도(1) ExamRepositoryexam패키지를 생성하여 작성save메서드가 5번 호출되면 1번은 예외가 발생하도록 적용한 저장소package hello.aop.exam;@Repositorypublic class ExamRepository { private static int seq = 0; /** * 5번중 1번이 실패하는 로직을 가상으로 적용 */ public String save(String itemId) { seq++; ..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 포인트컷 지시자1) 포인트컷 지시자(1) 포인트컷 표현식애스펙트J는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공하는데 이를 AspectJ pointcut expression 이라고 함애스펙트J가 제공하는 포인트컷 표현식이라는 뜻으로 줄여서 포인트컷 표현식이라고함2) 종류 및 요약 설명(1) execution메소드 실행 조인 포인트를 매칭스프링 AOP에서 가장 많이 사용하고 기능도 복잡함(2) within특정 타입 내의 조인 포인트를 매칭(3) args인자가 주어진 타입의 인스턴스 조인 포인트(4) target실행 객체의 클래스에 주어진 타입의 애노테이션이 있는 조인..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 프로젝트 생성 및 예제 프로젝트 만들기1) 프로젝트 생성 (1) ProjectGradleJava 17Spring Boot 3.3.5(2) MetadataGroup: helloArtifact: aopPackaging: Jar(3) DependenciesLombok스프링 부트로 프로젝트를 생성하면 스프링 프레임워크의 핵심 모듈들은 별도의 설정이 없어도 자동으로 추가됨(4) 설정 추가build.gradle에 아래의 코드를 추가하여 aop와 test에서 lombok을 사용할 수 있도록 설정// aop 설정implementation 'org.springframework.boot:spr..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. @Aspect 프록시 - 적용1) 적용스프링은 @Aspect애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어있는 어드바이저 생성 기능을 지원함직접 어드바이저를 만들었던 부분을 @AspectJ 애노테이션을 사용해서 생성** 참고@Aspect는 관점 지향 프로그래밍(AOP)을 가능하게 하는 AspectJ 프로젝트에서 제공하는 애노테이션이며 스프링은 이것을 차용해서 프록시를 통한 AOP를 가능하게 함AOP와 AspectJ 관련한 자세한 내용은 다음에 설명하며 지금은 프록시에 초점을 맞춰 이 애노테이션을 사용해서 스프링이 편리하게 프록시를 만들어 준다고 생각하면됨(1) L..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 빈 후처리기1) 소개(1) 일반적인 스프링 빈 등록@Bean이나 컴포넌트 스캔으로 스프링 빈을 등록하면 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록함이후에 스프링 컨테이너를 통해 등록한 스프링 빈을 조회해서 사용하면됨(2) 빈 후처리기 - BeanPostProcessor스프링이 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 직전에 조작하고 싶을 때 빈 후처리기를 사용빈 포스트 프로세서(BeanPostProcessor)를 번역하여 빈 후처리기라고 하며, 빈을 생성한 후에 이미지의 2번(등록)의 상황에서 무언가 처리하는 용도로 사용함빈..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 프록시 팩토리 - 소개1) 기존 동적 프록시의 문제점을 해결(1) 인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용스프링은 유사한 구체적인 기술들이 있을 때 그것들을 통합해서 일관성 있게 접근할 수 있고 더욱 편리하게 사용할 수 있는 추상화된 기술을 제공하는데, 동적 프록시도 통합해서 편리하게 만들어주는 프록시 팩토리(ProxyFactory)라는 기능을 제공함이전에는 상황에 따라서 개발자가 직접 JDK 동적 프록시를 사용하거나 CGLIB를 사용해야 했다면 프록시 팩토리 하나로 편리하게 동적 프록시를 생성할 수 있음프록시 팩토리는..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 리플렉션1) 리플렉션 이해(1) 리플렉션과 동적프록시지금까지 프록시를 사용하여 기존 코드를 변경하지 않고 로그 추적기라는 부가 기능을 적용할 수 있었으나 대상 클래스 수 만큼 로그 추적을 위한 프록시 클래스를 만들어야 한다는 점의 문제가 있음자바가 기본으로 제공하는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어낼 수 있어 프록시 클래스를 지금처럼 계속 만들지 않아도 됨프록시를 적용할 코드를 하나만 만들어두고 동적 프록시 기술을 사용해서 프록시 객체를 찍어내면 됨JDK 동적 프록시를 이해하기 위해서는 먼저 자바의..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 인터페이스 기반 프록시 - 적용1) V1 App에 LogTrace 적용(1) 프록시 사용프록시를 사용하면 기존 코드를 전혀 수정하지 않고 로그 추적 기능을 도입할 수 있음 (데코레이터 패턴 사용)V1예제의 클래스 의존관계를 살펴보면 인터페이스와 구현체를 생성하여 각 인터페이스의 구현체들은 각 계층의 인터페이스를 의존하고 있으며 클라이언트도 컨트롤러 인터페이스를 주입받고 있음런타임 객체에 의존관계도를 보면 클라이언트는 각 구현체들을 의존관계 주입을 받게 됨프록시를 도입하게 되면 각 계층의 인터페이스에 실제 구현체외에 프록시 클래스를 생성하여 동시에 구현하고, 런타임 시에는 클라..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 프로젝트 생성 및 예제 프로젝트 만들기1) 프로젝트 생성(1) 프로젝트 생성 및 설정 변경강의에서 제공된 프로젝트를 복사해서 사용자바 : 17스프링 부트 : 3.3.5dependency-management : 1.1.6gradle : 8.10.22) 예제 프로젝트 v1여기에서의 v1, v2, v3는 버전업이 되는 것은 아니고 실무에서 마주하게 되는 3가지 상황에 대한 예제라고 보면 되며 v1, v2, v3의 패키지를 각각 만들어서 코드들을 작성v1 - 인터페이스와 구현 클래스가 있고 스프링 빈으로 수동으로 직접 등록하는 상황(1) OrderRepositoryV1, OrderR..