Spring
[스프링 프레임워크] 3. 스프링 프레임워크의 핵심 기능 알아보기
yes_truly
2023. 10. 8. 04:33
728x90
1. 스프링 프레임워크의 핵심 기능
1) 의존성 주입(Dependency Injection)
- 의존하는 부분을 외부에서 주입하는 것
2) 관점 지향 프로그래밍(Aspect Oriented Programming)
- 중심적 관심사 : 실현해야 하는 기능을 나타내는 프로그램
- 횡단적 관심사 : 품질이나 유지보수 등의 관점에서 반드시 필요한 기능을 나타내는 프로그램
- 예외처리
- 로그정보 화면이나 파일 등으로 출력 처리
- 데이터베이스의 트랜잭션 제어 등
- 공통 처리 등의 횡단적 관심사를 추출하고 프로그램의 여러 곳에서 호출할 수 있게 설정해 개발자는 중심석 관심사에만 집중해 코드를 작성할 수 있게 함
2. DI 컨테이너 알아보기
1) DI 컨테이너
- 인스턴스 생성과 같은 작업을 수행하는 역할을 함
- 의존하는 부분 = 사용하는 객체에서 클래스에 사용되는 객체 클래스가 작성된 상태
- 외부로부터 주입 = 사용하는 객체 클래스의 밖에서 사용되는 객체 인스턴스를 주입
2) 다섯가지 규칙
DI컨테이너에 인스턴스 생성을 맡기고 사용하는 객체 클래스를 수정할 필요 없게 만드는 규칙
- 인터페이스를 이용해 의존성을 만듦
- 의존하는 부분에 인터페이스를 이용
- 인스턴스를 명시적으로 생성하지 않음
- 어노테이션을 클래스에 부여
- 스프링 프레임워크에서 인스턴스 생성
- 인스턴스를 생성하려는 클래스에 인스턴스 생성 어노테이션을 부여
- 인스턴스를 이용하고 싶은 곳에 어노테이션 부여
- 스프링에 의해 생성된 인스턴스를 이용하는 클래스에 참조받는 필드를 선언하고 @Autowired 어노테이션 부여
3. 어노테이션 역할 알아보기
1) 어노테이션을 세 가지 항목으로 설명
- 간단히 설명하면
- 주석을 의미하는 영어 표현
- '@xxx' 의 형태
- 외부 소프트웨어에 필요한 처리 내용 전달
- 외부 소프트에워에 필요한 처리 내용을 전달하는 어노테이션
- @Override → 오버라이드 메서드의 시그니처를 체크 → 자바 컴파일러
- @Author → 도움말 문서 생성 → JavaDoc
- @Component → 인스턴스 생성 → 스프링 프레임워크
- @NotEmpty → 입력란 체크 → Validator
- @Test → 테스트 실행 → JUnit
- 인스턴스를 생성하는 어노테이션은 사용하는 위치에 따라 가려 사용해야 함
2) 레이어별로 사용할 생성 어노테이션
- 레이어 : 계층 구조로 되어있는 각 층
- 레이어 나누는 방법 : 도메인 주도 설계
- 어플리케이션 레이어 : 클라이언트와 데이터 입출력 제어
- 도메인 레이어 : 애플리케이션의 중심이 되는 레이어, 업무 처리 수행
- 인프라스트럭처 레이어 : 데이터베이스에 대한 데이터 영속성 등 담당
- 레이어별 인스턴스 생성 어노테이션
- @Controller : 애플리케이션 레이어의 컨트롤러에 부여
- @Service : 도메인 레이어의 업무 처리에 부여
- @Repository : 인프라 레이어의 데이터베이스 액세스 처리에 부여
- @Component : 위 용도 이외의 인스턴스 생성 대상 클래스에 부여
3) 커스텀 어노테이션
java.lang.Annotation 인터페이스 상송해 직접 어노테이션을 만들 수 있음
4. AOP의 기초 지식
1) AOP
- 고유 용어
- 어드바이스(Advice) : 횡단적 관심사의 구현(메소드), 로그 출력 및 트랜잭션 제어 등
- 애스팩트(Aspect) : 어드바이스를 정리한 것(클래스)
- 조인 포인트(JoinPoint) : 어드바이스를 중심적인 관심사에 적용하는 타이밍.
- 포인트컷(PointCut) : 어드바이스를 삽입할 수 있는 위치
- 인터셉터(Interceptor)
처리의 제어를 인터셉트하기 위한 구조 또는 프로그램
어드바이스, 횡단적 관심사를 타깃, 중심적 관심사에 삽입하는 것처럼 보이게 할 수 있음 - 타깃(Target) : 어드바이스가 도입되는 대상
- 어드바이스의 종류
- Before Adivce(@Before) : 중심적 관심사가 실행되기 이전에 횡단적 관심사 실행
- After Returning Advice(@AfterReturning) : 중심적 관심사가 정상적으로 종료된 후에 횡단적 관심사 실행
- After Throwing Advice(@AfterThrowing) : 중심적 관심사로부터 예와가 던져진 후에 횡단적 관심사 실행
- After Advice(@After) : 중심적 관심사의 실행 후에 횡단적 관심사 실행
- Around Advice(@Around) : 중앙적 관심사 호출 전후에 횡단적 관심사 실행
- 인수는 ProceedingJoinPoint 인터페이스 타입 지정
- 어드바이스 중에서 위의 인터페이스의 proceed() 메소드 호출
- 어드바이스 적용 대상의 메소드를 임의의 타이밍으로 호출할 수 있으므로 전후로 다양한 처리 가능
- 반환값 돌려줄 필요가 있을 때는 Object타입으로 반환값 돌려줌
2) 포인트컷 식
- 직접 어드바이스를 만들 때 어드바이스 삽입 대상을 조건으로 지정할 수 있는데, 지정하는 조건 방법으로 포인트컷 식 사용
- execution 지시자
- execute(반환값 패키지.클래스.메소드)
- 와일드카드 이용해 적용 범위 지정 가능
- *
임의의 문자열을 나타내고 패키지를 나타낼 때는 임의의 패키지 한 계층을 나타냄
메소드의 인수에서는 한 개으 인수를 나타내는 반환값으로 이용할 수 있음 - ..
패키지를 나타내는 경우 0개 이상의 패키지를 나타냄
메소드의 인수를 표현하는 경우 0개 이상의 임의의 인수를 나타냄 - +
클래스 명 뒤에 기술해 클래스와 그 서브클래스 및 구현 클래스 모두를 나타냄
- *
3) 스프링 프레임워크가 제공하는 AOP 기능
- @Transactional
- 트랜잭션 관리
- 데이터베이스 액세스 처리 메소드가 정상종료하면 트랜잭션 커밋하고 예외 발생하면 롤백
728x90