오늘은 부트캠프 41일차이다. 오늘은 오전에 알고리즘 1문제와 지금까지 들었던 CS 기초를 복습해서 정리를 하였고, 오후에는 springboot 심화학습 과정을 끝까지 들었다. 저녁을 먹은 후 자바 문법 기초 수업을 들었다. 오늘 프로젝트 하기 전 springboot 강의를 기초, 숙련, 심화 학습을 다 들었다. 이제부터는 강의에서 들은 내용을 다듬고, 모르는 부분은 스스로 찾아가며 살을 붙이면서 배우면 될 것 같다.
오늘 배운 것
1. 스프링 AOP(Aspect Oriented Programming)
-관점 지향 프로그래밍이라고 불린다.
-어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.
-흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지다.
2. AOP 주요 개념
2-1. Aspect
-위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함.
2-2. Target
-Aspect를 적용하는 곳(클래스, 메서드 등)
2-3. Advice
-실질적으로 어떤 일을 해야할 지에 대한 것. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능
2-4. JointPoint
-Advice가 적용될 위치. 끼어들 수 있는 지점, 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능
2-5. PointCut
-JoinPoint의 상세한 스펙을 정의한 것.
3. AOP 특징
-프록시 패턴 기반의 AOP 구현체, 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위해서이다.
-스프링 빈에만 AOP를 적용 가능
-모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가 등)에 대한 해결책을 지원하는 것이 목적.