프로그래밍 이야기/SPRING 공부

스프링의 개요와 특징

글쓰는 개발자 김뉴네 2023. 8. 14. 07:16
728x90
반응형

스프링 : 표준 및 엔터프라이즈 자바 응용 프로그램을 신속하게 개발하는 데 널리 사용되는 오픈 소스 프레임워크이다.

   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 파일이나 어노테이션을 이용하여 트랜잭션의 범위와 규칙을 정할수 있어서  프로그래밍 트랜잭션보다 선언적 트랜잭션을 권고한다.

 

 

728x90
반응형