반응형
* 스프링 프레임워크의 특징
- POJO 기반의 구성
- 의존성 주입(DI)을 통한 객체 간의 관계 구성
- AOP 지원
- 편리한 MVC 구조
- WAS에 종속적이지 않은 개발 환경
1. POJO(Plain Old Java Object) 기반의 구성
- 오래된 방식의 간단한 자바 객체
- Java 코드에서 일반적으로 객체의 구성하는 방식을 스프링에서도 그대로 사용할 수 있음
2. 의존성 주입(DI)을 통한 객체 간의 관계 구성
- 의존성(Dependency)
- 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미
- 예를 들어 A 객체가 B 객체 없이 동작이 불가능한 상황을 'A가 B에 의존적이다'라고 표현
- 이때 B 클래스가 수정이 된다면 의존적이기 때문에 A 클래스도 수정을 해줘야하며 만약 여러 클래스가 의존한다며 모든 클래스들을 다 수정해줘야 함
1. 생성자를 외부에서 만들어줘서 매개변수에 넣어줌, 그렇게 되면 각 클래스들을 바꿔줄 필요가 없음
2. setter를 이용해서 세팅만 잘해주면 굳이 클래스 내부를 수정할 필요가 없음.
--> 하지만 이 방법들은 클래스들을 수정할 필요는 없지만 만들 때의 객체들은 수정해줘야 함
--> 스프링에서는 이것조차 자동으로 수정해줌 - 주입(Injection)
- 말 그대로 외부에서 밀어 넣는 것을 의미
- 예를 들어 어떤 객체가 필요로 하는 객체를 외부에서 밀어넣는 것을 의미
- 받는 입장에서는 어떤 객체인지 신경쓸 필요가 없고 어떤 객체에 의존하든 자신이 하던 역할은 변하지 않게 됨 - 의존과 의존성 주입
* 의존
ⓐ-------------------->ⓑ : a 객체에서 b 객체를 직접 생성
* 의존성 주입
ⓐ------->???<-------ⓑ : a가 b를 필요로 한다는 신호를 보내고, b 객체를 주입하는 것은 외부에서 이루어짐
- 의존성 주입방식을 사용하기 위해서는 ???라는 존재가 필요하게 됨
- 스프링 프레임워크에서는 ApplicationContext가 ???라는 존재이며, 필요한 객체를 생성하고 주입까지 해주는 역할을 함
- 따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고, 이러한 객체들을 엮는(Wiring) 작업의 형태로 개발하게 됨
- ApplicationContext가 관리하는 객체들을 '빈(Bean)'이라고 부르고, 빈과 빈 사이의 의존 관계를 처리하는 방식으로 XML, Java 코드, 어노테이션 방식을 이용
3. AOP의 지원
- Object Oriented Programing : 객체 지향 프로그래밍
- Aspect Oriented Programing : 관점 지향 프로그래밍
- 예외 처리 같은 것을 각 요청마다 하는 것이 아니라 하나로 묶어서 따로 처리하는 것(관점)
- 좋은 개발환경에서는 개발자가 비즈니스 로직에만 집중 가능
- 스프링 프레임워크는 반복적인 코드를 제거해줌으로써 핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공
- 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만 반드시 처리가 필요한 부분들을 횡단 관심사(cross-concern)라 함
- 스프링 프레임워크는 이러한 횡단 관심사를 분리해서 제작하는 것이 가능하고 횡단 관심사를 모듈로 분리하는 프로그래밍을 AOP라고 함
- 3가지의 이점
1) 핵심 비즈니스 로직에만 집중하여 코드 개발
2) 각 프로젝트마다 다른 관심사를 적용할 시 코드 수정 최소화
3) 원하는 관심사의 유지보수가 수월한 코드 구성이 가능
4. 트랜잭션의 지원
- 먼저 트랜잭션에 올려놓고 오류 없이 트랜잭션에 올라가면 그때 커밋을 해줌
- DB 작업시 트랜잭션 관리를 매번 상황에 맞게 코드로 작성하지 않고, 어노테이션이나 XML로 트랜잭션 관리 설정 가능
반응형
'웹개발 > Spring' 카테고리의 다른 글
[Spring] 스프링 프레임워크에서 DB 연결 (0) | 2022.07.01 |
---|---|
[Spring] 의존성 주입 테스트, 테스트 환경 (0) | 2022.07.01 |
[Spring] Lombok 라이브러리 (0) | 2022.07.01 |
[Spring] 스프링 프레임워크에서의 프로젝트 (0) | 2022.07.01 |
[Spring] 스프링 프레임워크 (0) | 2022.06.29 |