일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java
- window
- WebHook
- mariadb
- vagrant
- 코딩테스트
- sample
- Hibernate
- TLS
- spring boot
- github
- jdbc
- SSL
- centos7
- docker
- Git
- TypeScript
- Spring Legacy Project
- db
- 토비의스프링
- 프로그래머스
- Linux
- spring
- DISTINCT
- EC2
- ssh
- 책 정리
- Jenkins
- Client
- AWS
- Today
- Total
Woopii Vyeolog
aop(Aspect Oriented Programming) 본문
AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)은 스프링에서 DI와 더불어 매우 중요한 개념중 하나이다.
AOP는 절차지향이나 객체지향 프로그래밍처럼 그 자체로 하나의 프로그램을 형성할 수 있는 건 아니고, AOP는 객체지향 코드 위에서 이루어지며 객체지향을 보조하는 역할을 한다고 보면 될 것 같다.
AOP의 등장배경
처음 프로그래밍 언어가 생겨나고 프로그램이 생기기 시작했을 때 그 규모는 매우 작은 규모였다. 단순한 식을 계산한다던가 하는 것이 많았다. 이 때 사용한 프로그래밍 방식이 절차지향 프로그래밍이다.
절차지향은 매우 직관적 형태를 가진다. 실행 시 위에서부터 아래로 코드가 실행된다. 프로그램의 규모가 매우 작았기 때문에 코드를 효율적으로 작성하는 방식의 필요성이 제기되지 않았다.
하지만 프로그램을 일반 기업에서 사용하게 되면서 점점 프로그램의 규모가 커지기 시작했다.
규모가 커지면서, 절차지향 방식은 큰 프로그램을 만드는데 매우 비효율적이라는 것이 드러났다.
이제 소프트웨어 시장에서는 거대한 프로그램을 개발하고 유지보수하기 위한 새로운 방법론이 필요했졌고, 이 때 등장한 것이 객체지향프로그래밍(OOP : Object Oriendted Programmin)이다.
OOP는 객체(Object)라는 혁신적인 개념을 활용함으로써 큰 프로그램을 모듈단위로 축소시켜
작성할 수 있게 함으로써 절차지향의 비효율성을 극복한다. 하지만 이러한 객체지향방식에도 허점이 있었다. 객체지향 방식의 장점 중의 하나는 프로그램을 모듈화 시켜 이를 재활용함으로써
코드의 중복을 줄이고 코드의 재사용성을 높이는 것이다.
하지만 프로그램의 크기가 엄청나게 커지면서 이러한 모듈 안에서마저 중복되는 코드가 생기게 되는 것이었다. 이를 횡단 관심사(Crosscutting-Concerns)라고 한다. 그 중 자주 언급되는 것이 바로 트랜잭션, 로깅, 성능 분석 등 이다. 이러한 횡단 관심사들은 여러 모듈들을 말 그래도 횡단하면서 존재하게 된다.
AOP의 목적은 바로 이러한 횡단관심사를 모듈화 하는 방법을 제시하는 것이다. 이를 통해 코드의 중복을 제거하고 이해하기 쉽게하게 프로그램의 작성을 쉽게하고 유지보수를 편리하게 할 수 있다.
조금 더 쉽게 풀어 얘기하면,
프로그램을 짜면 다양한 서비스가 있고 다양한 요구사항이 있다. 요구사항엔 서비스에 해당하는 본질적인 기능(예: 전체 데이터 조회)도 있지만 로그, audit, security, 트랜잭션과 같이 모든 서비스에 공통적으로 적용이 되는(모든 서비스에 적용되는) 기능도 있다.
이러한 기능들은 관점을 다르게 보는 것이다.(횡단 관심사)
위 그림처럼 만약 본질적인 기능들을 횡으로 보게 된다면, 공통된 기능들은 종으로 보는 것이다. (서비스의 관점을 다르게 보는 것이다.)
본질적 기능과 공통으로 들어가는 기능들 모두 모듈화 하여 코드의 중복을 제거하고 프로그램의 작성과 유지 보수를 더욱 용이하게 할 수 있다
출처 & 참고
https://3months.tistory.com/74
'Spring Framework' 카테고리의 다른 글
[Spring] 각기 다른 환경의 property구성 및 적용 (0) | 2021.02.14 |
---|---|
[Spring] property파일 (0) | 2021.02.14 |
(Spring Framework, Hibernate)간단한 성적 관리 페이지 (0) | 2020.03.20 |
Hibernate 관련 정리,(3계층 구조, 간단 설명 포함) (0) | 2020.03.20 |
(Spring Legacy Project - MVC모델) JDBC Template을 써서 DB연동 (0) | 2020.03.19 |