본문 바로가기

전체 글

(404)
[Spring Core] AOP - JoinPoint [Join Point] : 추상적인 개념으로 AOP를 적용할 수 있는 지점을 의미 * AOP 적용 위치 - 지금까지 학습한 메서드 실행 위치 뿐 아니라 다양한 위치에 적용이 가능 : 적용 가능 지점(조인 포인트) : 생성자, 필드 값 접근, static 메서드 접근, 메서드 실행 - AOP를 수행하는 메서드는 이 JoinPoint 인스턴스를 인자로 받게 됨 - JoinPoint 인스턴스에서 조인 포인트 지점의 정보를 얻어야 함 JoinPoint : 어드바이스가 적용될 수 있는 위치, 메서드 실행 위치, 생성자 호출, 필드 값 접근, static 메서드 접근 같은 프로그램 실행 중 지점을 나타냄 : AspectJ를 사용해 컴파일 시점과 클래스 로딩 시점에 적용하는 AOP는 바이트코드를 실제 조작하기 때문에..
[Spring Core] AOP - Pointcut 표현식 [포인트컷 표현식] : 포인트컷은 관심 조인 포인트를 결정하므로 어드바이스가 실행되는 시기 제어가 가능하며 AspectJ는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공 : AspectJ pointcut expression >> AspectJ 가 제공하는 포인트컷 표현식을 줄여서 표현하는 것 * 포인트컷을 이용하면 어드바이스 메서드가 적용될 비즈니스 메서드를 정확하게 필터링 할 수 있음 Pointcut : 특정 조건에 의해 필터링된 Joinpoint, 수많은 Joinpoint 중에 특정 메서드에서만 공통기능(횡단관심사)을 수행시키기 위해 사용함) 포인트컷 표현식 결합) : &&, ||, !를 사용하여 결합 가능 : 이름으로 포인트컷 표현식 참조가 가능 일반적인 포인트컷 표현식) 1. 모든 공개 ..
[Spring Core] AOP - about Advice [Advice 순서] : 어드바이스는 기본적으로 순서를 보장하지 않음 >> 순서 지정을 할 경우 @Aspect 적용 단위로 org.springfamework.core.annotation.@Order 애너테이션 적용이 필요함 (어드바이스 단위가 아닌 클래스 단위로 적용이 가능하며, 하나의 애스펙트에 여러 어드바이스가 존재하면 순서 보장 불가) : 애스펙트를 별도의 클래스로 분리해야 함 [Advice 종류] 1. Before : 조인 포인트 실행 이전에 실행 : 타겟 메서드가 실행되기 전 처리해야 할 필요가 있는 부가 기능 호출 전 공통 기능을 실행 : Before Advice 구현한 메서드는 일반적으로 리턴타입이 void (리턴값을 갖더라도 Advice 적용 과정에 영향 없음) : 작업 흐름 변경 불가 :..
[Spring Core] About AOP & AOP 용어 AOP 관련 정리글 https://kcode-recording.tistory.com/m/43 [Spring Core] AOP (Aspect Oriented Programming) AOP(Aspect Oriented Programming)란? : OOP(Object Oriented Programming)은 객체지향 프로그래밍 즉, 객체 간의 관계를 지향하는 프로그래밍 방식 : Aspect(관심)을 지향하는 프로그래밍은 애플리케이션에 필요한 기 kcode-recording.tistory.com Spring MVC 구조는 @Controller, @Service, @Repository와 같이 관심사 별 계층을 나눠 객체를 관리하게 되는데 관심사의 분리는 모듈화의 핵심임. 하지만 OOP에서 객체를 잘 활용하기 위..
[Spring Core] DI 다양한 의존 관계 중 생성자 주입 권장 이유 의존 관계에는 필드 주입, 수정자 주입, 생성자 주입이 존재 >> 필드 주입과 수정자 주입은 의존성이 있는 객체가 생성되지 않아도 이를 포함하는 객체가 생성 가능해 이를 미리 인지하지 못하다가 런타임시 오류가 발생하여 위험하다는 것이 핵심이나 생성자 주입은 다름 생성자 주입은 생성자에서 의존관계 주입이 일어나기 때문에 생성자가 실행될 때 (= 객체가 생성될 때) 의존 객체의 null 여부 검사를 하기 때문에 컴파일시에 오류를 발생시켜 런타입 오류 발생을 미리 방지함 [사용자 주입 사용 이유] 1) 불변 : 의존 관계는 처음 애플리케이션 실행 후 종료전까지 변경되지 않고, 변경되서는 안됨 >>객체를 생성할 때 최초로 1번만 호출되고 그 이후에는 다시 호출되지 않기 때문에 불변하게 설계가 가능함 2) 누락 ..
[Spring Core] 컴포넌트 스캔 & 필터 [스캔] 1) @Component : 컴포넌트 스캔에서 사용 2) @Controller & @RestController : 스프링 MVC 및 REST 전용 컨트롤러에서 사용 3) @Service : 스프링 비즈니스 로직에서 사용(특별한 처리를 하지 않으며, 개발자들이 핵심 비즈니스 로직이 여기에 있다는 비즈니스 계층 인식에 도움이 됨) 4) @Repository : 스프링 데이터 접근 계층에서 사용해 해당 계층으로 인식 및 데이터 계층의 예외를 스프링 예외로 변환함 5) Configuration : 스프링 설정 정보에 사용해 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 함 *1~5는 모두 @Component를 포함함 [필터] 1) includeFilters : 컴포넌트 스캔..
[Spring Core] Component Scan [Component Scan] : Spring은설정 정보 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공함 : @Component가 붙은 모든 클래스를 스프링 빈으로 등록해주기 때문에 설정 정보에 붙여주면 됨 (의존 관계도 자동으로 주입하는 @Autowired 기능 제공) * Component Scan을 이용할 경우 @Configuration이 붙은 설정 정보도 자동으로 동록되기 때문에 유의해야 함 (@Configuration 코드 내에 @Component 애너테이션이 붙어있기 때문) 정리) @ComponentScan : @ComponentScan이 등록된 곳에서 @Component를 가져오기 위해 사용 @Autowired : 생성자 의존성 주입에 필요한 설정 정보 대신 의존관계 자동 주입..
[Spring Core] Java 기반 컨테이너 설정 [@Bean] : 메서드-레벨 애너테이션으로 에서 제공하는 일부 속성을 지원함 : @Configuration-annoted 또는 @Component-annoted 클래스에서 사용이 가능함 : 대상 빈이 하나의 생성자만 정의하는 경우 @Autowired 지정할 필요가 없음 빈 선언) : 메서드에 @Bean 애너테이션을 추가해 Bean으로 선언 가능 : 빈 정의가 있는 인터페이스를 구현해 bean configuration 설정도 가능 (' implements 빈_정의가_있는_인터페이스명 '을 클래스에 붙여 설정 가능) (1) @Configuration public class AppConfig { //빈 선언 @Bean public TransferServiceImpl transferService() { ret..