Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Tags
more
Archives
Today
Total
관리 메뉴

고마구의 개발 블로그

240716 13주차 화요일 - Spring 02 본문

KDT풀스택과정 공부

240716 13주차 화요일 - Spring 02

고마구 2024. 7. 16. 16:44

 

- 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>