고마구의 개발 블로그
240716 13주차 화요일 - Spring 02 본문
- IoC : 객체의 제어 권한을 개발자가 아닌 스프링 컨테이너가 담당하는 설계 방식.
- DI : 객체를 미리 생성해 두고 필요한 객체를 연결시키는 방식.
- AOP : 공통 기능과 핵심 로직을 분리하여 개발하는 관점지향 프로그래밍 기법.
- PSA : 환경 및 기술 변화와 관계없이 일관된 방식으로 접근하며, 설정은 주로 XML 파일에서 지정됨.
- IoC(Inversion of Control) - (제어의 역전)
일반적으로 프로그램이 실행될 때, 제어 흐름은 프로그램이나 프레임워크에 의해 결정됩니다.
이것은 일반적으로 "제어의 흐름"이라고 합니다.
반면, IoC는 이 제어 흐름을 프레임워크나 컨테이너에 위임하여 프로그램의 제어 흐름을 역전시키는 개념입니다.
즉, IoC는 프로그램의 제어 흐름을 개발자가 아닌 외부에서 관리하는 것입니다.
-IoC의 장점-
- 유연성과 확장성 : 객체의 생성과 관리를 외부 컨테이너에 위임하여,
객체 간의 결합도를 낮추고 유연하고 확장 가능한 구조를 만들 수 있습니다.
- 테스트 용이성 : 의존성 주입을 통해 모의 객체(Mock)를 주입하여 테스트를 용이하게 할 수 있습니다.
- 재사용성 : 독립적인 컴포넌트로서 재사용 가능성이 높아집니다.
- DI(Dependency Injection) - (의존성 주입)
DI는 객체가 자신의 종속 객체를 직접 생성하지 않고, 외부에서 주입받는 방법을 말합니다.
이는 IoC의 구체적인 구현 방식 중 하나입니다.
-DI의 장점-
- 테스트 용이성 : 의존 객체를 쉽게 모의(mock) 객체로 대체하여 테스트할 수 있음.
- 코드 재사용성 및 유연성 : 의존성을 주입받기 때문에 코드를 재사용하고 확장하기 쉬움.
- 결합도 감소 : 객체 간의 결합도가 낮아져 유지보수와 확장이 쉬워짐.
- 가독성 및 유지보수성 향상 : 의존성이 명시적으로 주입되어 코드의 의도가 명확해지고 변경이 용이함.
- 테스트와 프로덕션 코드의 분리 : 테스트 코드와 프로덕션 코드를 분리하여 안정적인 프로덕션 환경을 유지할 수 있다.
- 의존 객체 주입 : 의존 객체가 외부에서 주입되며, 이는 의존성 주입(DI)입니다.
객체의 생성과 초기화는 외부에서 관리되며, ExampleCar 클래스는 필요한 객체를 주입받아 사용합니다.
의존객체(Dependency)를 상속받은 객체는 누구나 주입(Injection)할 수 있다.
IOC컨테이너 의존객체를 관리하는 컨테이너(여러 종류 객체)
IoC 컨테이너를 설명하는 다이어그램입니다.
각 구성 요소와 흐름을 다음과 같이 설명할 수 있다.
- IoC 컨테이너 -
- B, C, D, E, F 객체를 생성 및 관리합니다.
- IoC 컨테이너는 객체들의 생성과 의존성 주입을 담당합니다.
- A 객체 -
- 외부에서 생성된 객체들이 주입됩니다.
- A 객체는 IoC 컨테이너에 의해 관리되는 객체들의 의존성을 주입받습니다.
- 외부에서 생성한 객체를 주입 -
- A 객체에 외부에서 생성된 객체들이 주입됩니다.
- 의존성 주입(DI)을 나타내며, A 객체가 자신의 의존성을 직접 생성하지 않고 외부에서 주입받는다는 의미입니다.
- 객체를 외부에서 생성 -
- IoC 컨테이너는 객체를 외부에서 생성하고 관리합니다.
- 컨테이너가 객체들의 생명 주기를 관리하며, 필요한 곳에 주입합니다.
이 다이어그램은 IoC 컨테이너의 역할과 의존성 주입의 개념을 시각적으로 설명하고 있습니다.
IoC 컨테이너는 애플리케이션의 객체들을 생성하고 관리하며, 객체 간의 의존성을 주입해줍니다.
|
- AOP(Aspect Oriented Programming) - (관점 지향 프로그래밍)
AOP는 공통적인 기능(예: 로깅, 보안, 트랜잭션 관리)을 핵심 비즈니스 로직과 분리하여
모듈화하는 프로그래밍 기법입니다.
이를 통해 코드의 중복을 줄이고, 핵심 로직의 가독성과 유지보수성을 향상시킵니다.
-AOP의 장점-
- 모듈화와 재사용성 증가 : AOP는 횡단 관심사(cross-cutting concern)를 별도의 모듈로 분리하여
중복 코드를 줄이고 코드의 재사용성을 증가시킵니다.
- 유지보수성 개선 : 핵심 기능과 관점을 분리함으로써,
코드 변경이 필요할 때 관심사에 대한 수정을 중앙화하여 유지보수성을 향상시킵니다.
- 설계의 명확성 : 핵심 로직과 관심사를 분리함으로써 코드의 의도가 명확해지고,
시스템의 전체적인 구조를 이해하기 쉬워집니다.
- 횡단 관심사 처리 효율성 : 보안, 로깅, 트랜잭션 관리 등과 같은 횡단 관심사를 효율적으로 처리할 수 있어서
코드의 중복을 줄이고 시스템 전반의 일관성을 유지할 수 있습니다.
- Portable Service Abstraction - (일관성 있는 서비스 추상화)
PSA는 환경과 세부 기술의 변화에 관계없이 일관된 방식으로 서비스를
사용할 수 있게 하는 추상화 계층을 제공합니다.
이는 구체적인 기술과 설정을 XML 파일이나 다른 설정 파일에서 지정하여,
코드 변경 없이 설정만으로 다양한 환경에 적응할 수 있게 합니다.
-PSA의 장점-
- 기술 이식성과 유연성 : 서로 다른 기술 스택을 사용하는 시스템 간의 통합을 간소화하고,
코드의 이식성을 개선하여 애플리케이션의 유연성을 높입니다.
- 중복 코드 감소 : 서로 다른 기술에 대해 일관된 추상화 계층을 제공함으로써,
중복 코드를 줄이고 개발자가 일관된 방식으로 서비스를 사용할 수 있습니다.
- 통합 관리 용이성 : 다양한 서비스를 일관된 방식으로 관리할 수 있어서
시스템의 복잡성을 줄이고 통합 관리를 용이하게 합니다.
- 변경 관리의 편리성 : 특정 기술의 변경이 필요할 때 해당 기술에 대한 추상화 계층만 수정하면 되므로,
변경 관리가 편리하고 유지보수성을 높입니다.
-Spring AOP에서 용어 -
• Aspect : 공통기능
• Advice : 공통기능 자체
• Advicor = pointcut+advice
• 주기능이 실행하려면 공통기능을 실행할 부분(진입점)을 선택하고
(먼저 실행할지 나중에 실행할지) 공통기능을 실행한다.
• Pointcut : 공통기능을 적용할 대상을 지정하는 규칙
• Joinpoint : 특정한 어떤 작업이 시작되는 지점 (weaving된 결과의 시작점)
• Target : 핵심 로직
• Weaving : advice+target 를 조합하는 과정
<link rel="stylesheet" type="text/css" href="/ex/resources/css/my.css">
<!-- <link rel="stylesheet" type="text/css" href="resources/css/my.css">-->
<script src="/ex/resources/js/my.js">
</script>
예외처리
pom.xml 변경
<properties>
<java-version>1.8</java-version>
<org.springframework-version>4.3.5.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
'KDT풀스택과정 공부' 카테고리의 다른 글
240718 13주차 목요일 - Spring 04 (0) | 2024.07.18 |
---|---|
240717 spring jdbc 4가지 넣을거 (0) | 2024.07.17 |
240715 13주차 월요일 - 스프링 01 (0) | 2024.07.15 |
240714 12주차 일요일 미니 프로젝트 쇼핑몰 제작 10 (0) | 2024.07.14 |
240712 12주차 금요일 미니 프로젝트 쇼핑몰 제작 09 (0) | 2024.07.12 |