일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- formmatted
- 어노테이션
- 작업명중복
- 스프링 부트 테스트
- ./gr
- 로그인 인증 흐름
- 로그인/로그아웃
- MSA
- 세션기반 인증
- 스프링부트 계층구조
- Java
- JPA
- 비동기
- 스프링
- 토큰기반 인증
- 프레젠테이션 계층
- 비즈니스 계층
- ORM
- http
- @temproal
- spring
- 동기
- 스프링부트 구조
- ./gradlew docker
- IPC
- RESTfull API
- JWT
- 스프링부트
- java I/O
- 퍼시스턴스 계층
- Today
- Total
[DEV] J-Jay
스프링 Concept (2) 본문
AOP(Aspect Oriented Programming) 관점 지향 프로그래밍
프로그래밍에 대한 관심을 핵심관점, 부가 관점으로 나누어서 관심 기준으로 모듈화 하는 것을 의미한다.
이해가 조금 어려우니 예시를 들겠다.
예를 들어 계좌 이체, 고객 관리하는 프로그램이 있을 때 각 프로그램에는 로깅 로직, 즉, 지금까지 벌어진 일을 기록하기 위한 로직과 여러 데이터를 관리하기 위한 데이터베이스 연결 로직이 포함 된다. 이때 핵심 관점은 계좌 이체, 고객 관리 로직이고, 부가 관점은 로깅, 데이터베이스 연결 로직이다. 실제 프로그램의 기능으로 로직을 정리하면 다음 그림과 같다.
그림을 보면 로깅과 데이터베이스 연결은 모두 계좌 이체, 고객관리에 필요하다.
여기에 AOP관점을 적용하면 부가 관점에 해당하는 로직을 모듈화해 앞에서 본 그림처럼 개발할 수 있게 해준다.
다시 말해 부가 관점 코드를 핵심 관점 코드에서 분리할 수 있게 해준다.
그 결과 프로그래머는 핵심 관점 코드에만 집중할 수 있게 될 뿐만 아니라 프로그램의 변경과 확장에도 유연하게 대응 할 수 있어 좋다.
PSA(Portable Service Abstraction) 이식 가능한 서비스 추상화
풀어서 설명하자면 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스를 말한다.
대표적인 PSA의 예시는 클라이언트의 매핑과 클래스, 메서드의 매핑을 위한 어노테이션이다.
예를 들어 스프링에서 데이터베이스에 접근하기 위한 기술로 JPA, MyBatis, JDBC같은 것들이 있는데, 여기에서 어떤 기술을 사용하든 일관된 방식으로 데이터베이스에 접근하도록 인터페이스를 지원 한다. 또 다른 예시로는 WAS도 PAS의 예시 중 하나라고 볼 수있다. 코든느 그대로 두고 WAS를 Tomact이 아닌 Netty와 같은 곳에서 실행해도 기존 코드를 그대로 사용할 수 있기 때문이다.
스프링 핵심 4가지
스프링 프레임워크는 IoC/DI를 통해 객체 간의 의존관계를 설정하고 AOP를 통해 핵심 관점과 부가 로직을 분리해
개발하며, PSA를 통해 추상화된 다양한 서비스들을 일관된 방식으로 사용하도록 한다.
- IoC : 객체의 생성과 관리를 개발자가 하는 것이 아니라 프레임워크가 대신 한다.
- DI : 외부에서 객체를 주입받아 사용한다.
- AOP : 프로그래밍을 할 때 관점과 부가 관점을 나누어 개발한다.
- PSA : 어느 기술을 사용하던 일관된 방식으로 처리하도록 한다.
'Back-end > Spring' 카테고리의 다른 글
스프링 부트 코드 이해 (1) (0) | 2023.08.31 |
---|---|
스프링 부트 스타터 (0) | 2023.08.31 |
스프링 Concept (1) (0) | 2023.08.30 |
스프링과 스프링 부트 (0) | 2023.08.30 |
Spring Boot 프로젝트 생성 (0) | 2023.08.28 |