스프링 : 표준 및 엔터프라이즈 자바 응용 프로그램을 신속하게 개발하는 데 널리 사용되는 오픈 소스 프레임워크이다.
JAVA EE 플랫폼에서 웹 애플리케이션을 신속하게 개발할 수 있고, 모든 인프라 요구 사항을 제공하는 경량급 오픈
소스 프레임 워크이다.
자바는 웹 애플리케이션을 개발할 때 한 클래스 안에서 수직적인 흐름만 제어할 수 있는 반면 스프링은 특정 클래스에 대한 수평적 처리까지 가능하여 더욱 강력하다.
- 스프링은 의존성 주입 (DI : Dependency Injection) 이나 관점지향 프로그램이(AOP:Aspect Oriented Programming)과 같은 기능 뿐 아니라 기본적으로 웹을 개발할 수 있는 웹 MVC 프레임 워크도 함께 제공한다.
- 순수한 비지니스 로직을 구현하는 것 이외에도 기술적으로 고려해야할 사항이 많은 대규모 애플리케이션 개발의 복잡성을 간소화 하기 위해 스프링을 사용한다.
- API : Application Programming Interface
- 스프링은 별도의 API를 이용하여 애플리케이션 코드를 따로 작성하지 않는 정책을 사용하고 있다.
- POJO(Plan Old Java Object) : 스프링은 반드시 인터페이스를 구현하거나 HttpServlet 클래스를 상속하지 않아도 되는데 이는 일반적인 자바 언어와 꼭 필요한 API 외에는 특정 구현 기술에 종속되지 않으며 특정 데이터 베이스나 서버에 의존하지 않는 자바 클래스 만으로 구성해도 프로그래밍이 가능한 개념
- POJO는 어떤 규약이나 규제가 없으므로 객체 지향 설계가 자유롭다.
- 비지니스 로직 : 업무에 필요한 데이터를 처리하는 애플리케이션의 일부를 의미
데이터 입력, 수정, 조회, 보고서 처리 등을 수행하는 루틴, 즉 보이지 않는 곳에서 일어나는 각종 처리를 의미함
대개 클라이언트 프로그램은 사용자 인터페이스와 비지니스 로직으로 구성되며, 서버 프로그램은 대부분 비지니스 로직으로만 구성됨
- 의존성 주입 : 객체 간 관계를 관리할 때 사용하는 기법 , 객체 또는 구성 요소 사이의 의좀 관계를 직접 생성하거나 제어하는 것이 아니라 외보의 빈 설정 파일을 활용하여 스프링 컨테이너가 자동으로 연결하는 방식
- 컨테이너가 객체 의존 관계를 자동으로 연결하므로 개발자가 직접 컨테이너 API로 의존적인 객체들의 관계에 관여하지 않아도 되며 객ㅊ 의존관계가 필요할 때만 외부의 빈 설정 파일에 관련 정보를 추가해주면 된다.
- 객체 간 의존 관계를 관리하는 방법
스프링에서 각 객체 간 의존관계를 관리하는 방법은 생성자에 의존 객체를 인자로 하는 방법과 setter 메서드에 인자로 하는 방법이 있으며 이 두방식을 모두 간단한 어노테이션만으로도 처리할 수 있다.
> 생성자 의존성 주입
public class A{
private B b;
public A(B b){
this.b = b;
}
}
> setter 메서드 의존성 주입
public class A{
private B b;
public void setB(B b) {
this.b = b;
}
}
- 의존성 주입의 주요 장점은 두 객체 간 의존 관계를 줄이는 느슨한 결합도 이다.
- 객체간 의존 관계를 유연하게 처리하려면 인터페이스를 활용해야 한다. 인터페이스를 활용하면 의존 객체를 바꾸지 않고 인터페이스를 구현한 클래스로 변경하여 사용할 수 있다.
- 느슨한 결함도란?
두 객체간 의존관계를 줄이는 것이다.
> 의존관계 결합도가 높은 경우
public class A{
public A(){
b = new B();
}
}
==>B 클래스가 변경되면 A 클래스에 영향을 많은 영향을 미치기 때문에 서로 의존관계가 있으며, 결합도가 높다고 할 수 있다.
> 의존관계가 낮은 경우 - interface 사용
public interface B{
}
public class A{
public A(){
b = new B();
}
} 모듈을
- 대부부분의 애플리케이션은 특정 기능을 책임지는 모듈 여러 개로 구성되는데 대체로 자신이 핵심 기능 외에도 로깅이나 트랜잭션 관리, 보안등 시스템 서비스를 수행해야 하는 경우가 많다.
- 시스템 서비스는 시스템의 여러 컴포넌트와 관련되므로 이를 공통 관심사라고 한다.
- 관점 지향 프로그래밍 : 애플리케이션에서 공통 관심사를 비지니스 로직으로 분리하고 이 공통 관심사를 효과적으로 애플리케이션에 삽입하는 기술
- 핵심적인 기능에서 부가적인 공통 관심사를 분리하여 Aspect라는 독특한 공통몯ㄹ을 만들어 설계하고 개발하는 방법
- AOP: 애플리케이션 전체에 걸쳐 사용되는 기능을 애스팩트에 담아 재사용 가능
개발자는 핵심 관점 코드에 비지니스 로직만 구현하면 되기 때문에 개발과정의 간소화됨
- 공통 모듈을 각 독립된 모듈로 중복없이 작성하고 이를 적합한 위치인 xml 설정 파일에 설정해서 핵심 관점 코드와 결합하여 서로 독립된 다차원의 모듈로 만들 수 있음
- 트랜잭션 : 쪼갤 수 없는 최소 단위의 작업, 애플리케이션을 개발 할 때 데이터 무결성과 일관성을 보장하는 필수 기법으로써 어떤 작업 프로세스를 하나로 묶어 실행하다 작업이 하나라도 실패하면 모두 실패 처리하고, 전체 작업이 성공하면 성공으로 처리하는 논리적인 작업 묶음
- 스프링이 제공하는 트랜잭션 추상 계층을 이용하면 데이터 베이스 연동 기술과 상관없이 같은 방식으로 트랜잭션 기능을 활용할 수 있다.
- 트랜잭션 관리 방법 : 프로그래밍적 트랜잭션과 선언적 트랜잭션으로 구분
- 프로그래밍적 트랜잭션 : 코드에서 트랜잭션 범위를 정교하게 정의할 수 있지만 트랜잭션이 스프링의 종속적인 코드가 될 가능성이 큼
- 선언적 트랜잭션 : 코드를 수정하지 않고도 트랜잭션을 적용하거나 변경할 수 있으며 간편하게 xml 파일이나 어노테이션을 이용하여 트랜잭션의 범위와 규칙을 정할수 있어서 프로그래밍 트랜잭션보다 선언적 트랜잭션을 권고한다.
'프로그래밍 이야기 > SPRING 공부' 카테고리의 다른 글
STS 톰캣에러 The server cannot be started because one or more of the ports are invalid. Open the server editor and correct the invalid ports. (0) | 2023.08.29 |
---|---|
이클립스에 STS 설치하기 (0) | 2023.08.28 |
스프링 MVC 정의와 구성요소 웹요청 처리과정 (0) | 2023.08.21 |
스프링MVC (0) | 2023.08.13 |
스프링의의존성구조 (0) | 2023.08.13 |