⚛️ React & 🌿 Spring AOP 정리
⚛️ React
🌍 전역 상태 관리 (Redux 활용)
| 단계 | 설명 | 예시 코드 |
|---|
| 1. 전역변수 초기값 설정 | 전역 상태를 객체 형태로 정의 | const initialState = { } |
| 2. Slice 정의 | createSlice를 이용해 전역 상태 로직 정의 | const XXXSlice = createSlice({ ... }) |
| 3. Export 설정 | reducer와 actions를 내보내기 | export const { actions } = XXXSlice;
export default XXXSlice.reducer; |
| 4. 상태 변경(dispatch) | 전역 상태를 변경할 때 사용 | const dispatch = useDispatch(); |
| 5. 상태 조회(useSelector) | 전역 상태를 가져올 때 사용 | const { state명 } = useSelector((state) => state.슬라이스명) |
💾 스토리지 사용하기 (Redux Persist)
Redux 상태를 저장소(LocalStorage 등)에 영구적으로 저장할 수 있습니다.
| 단계 | 설명 | 예시 코드 |
|---|
| 1. 설정 파일 생성 | persist 설정 객체 정의 | const persistConfig = { key: 'XXX', storage }; |
| 2. 스토리지 import | redux-persist에서 storage 불러오기 | import storage from 'redux-persist/lib/storage'; |
| 3. Reducer에 적용 | persistReducer로 적용 | const persistedReducer = persistReducer(persistConfig, 슬라이스); |
🌿 Spring AOP
🧭 개념
- AOP(Aspect Oriented Programming): 부가 기능을 하나의 모듈로 묶어, 핵심 비즈니스 로직과 분리하는 프로그래밍 방법.
- 주 사용 예시: 로그 기록, 트랜잭션 처리, 보안 (인증/권한), 유효성 검사 등
💡 예시: joinPoint.getArgs()로 핵심 로직의 매개변수를 가져와 조건 검증 가능
⚙️ AOP 어노테이션 및 적용 규칙
| 어노테이션 | 실행 시점 | 설명 |
|---|
@Before | 메소드 실행 전 | 사전 검증(권한, 유효성 등) 수행 |
@After | 메소드 실행 후 | 로그 기록, 리소스 해제 등 수행 |
@AfterReturning | 메소드 성공 후 반환값 획득 | 반환값 가공 및 확인 가능 |
@Around | 메소드 실행 전/후 제어 | 성능 측정, 트랜잭션 처리 등에서 사용 |
📜 execution 문법 구성
| 구성 요소 | 의미 | 예시 |
|---|
| 반환타입 | 적용할 메소드의 반환 타입 | execution(* com.example.Service.*(..)) |
| 경로 | java 이하 클래스 경로 | execution(* example.service.*(..)) |
| 메소드명 | 적용할 메소드 지정 | execution(* AopService.enter(..)) |
| 매개변수 지정 | 특정 인자를 갖는 메소드 대상 | execution(* AopService.enter(..)) && args(매개변수명,..) |
@AfterReturning(value="execution(* ... )", returning="매개변수명") → 반환값을 변수로 받아올 수 있음
🔄 @Around 상세 사용법
@Around는 실제 메소드 실행 시점을 직접 제어할 수 있습니다.
| 메서드 | 설명 |
|---|
.getSignature() | 실행 중인 비즈니스 로직 정보 (메소드명, 위치 등) 확인 |
.getArgs() | 실행 대상의 매개변수 배열 반환 |
.proceed() | 실제 핵심 로직 실행 및 결과 반환 |
Object result | 핵심 로직 실행 결과를 저장하는 객체 |
예시 코드
@Around("execution(* com.example.service.*(..))")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("[AOP Before] 메소드 호출: " + joinPoint.getSignature());
Object result = joinPoint.proceed();
System.out.println("[AOP After] 반환값: " + result);
return result;
}