Spring

스프링 들어가기에 앞서...

Z00_HWAN_99 2024. 9. 3. 20:15
728x90
반응형

1. 프레임워크란?
  사전적인 의미로는 뼈대, 구조, 틀을 의미함.


2. 스프링 프레임워크란? 

  자바 플랫폼을 위한 오픈소스 어플리케이션 프레임워크로서 엔터프라이즈급 어플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션이다.


3. 스프링의 핵심 모듈 5가지

   IOC, DI, AOP, 경량 컨테이너, POJO

4. 의존관계 확인 
   의존하는 부분을 외부에서 주입하는 것 (DI)
   - 무엇에 의존하고, 무엇을 밖에서 주입해야 하나 

5. 관점 지향 프로그래밍 (Aspect Oriented Programming)

   - 중심적 관심사 (Primary Concern) : 실현해야 할 기능을 나타내는 프로그램 
   - 횡단적 관심사 (Crosscutting -Concern) : 핵심기능 은 아니지만 품질이나 유지보수 관점에서 필요한 기능을 나타내는 프로그램 


6. DI 컨테이너 === 스프링컨테이너  ===> DI의 실현을 돕는 프레임워크 

   DI  - 1) 클래스 의존   
          2) 인터페이스 의존 
              인터페이스의 참조를 받는 유형으로 사용하며, 변수의 이름을 변경하지 않아도 된다.
              인터페이스가 선언된 메서드를 이용하면 클래스가 바뀌어도 메서드명을 변경하지 않아도 된다. 


   의존하는 부분을 외부에서 주입하는 것 
   
  의존하는 부분 '사용하는 객체'클래스에 '사용되는 객체' 클래스가 작성된 상태 
  외부에서 주입 '사용하는 객체'를 클래스 밖에서 '사용되는 객체' 인스턴스를 주입하는 것 



 DI 컨테이너 인스턴스 생성을 맡길때 지켜야할 규칙 5가지 단계 

  1. 인터페이스를 이용하여 의존성을 만든다.  => 의존하는 부분에 인터페이스를 이용한다. 
  2. 인스턴스를 명시적으로 생성하지 않는다.  => 인스턴스 생성에 new 키워드를 사용하지 않는다. 
  
  3. 어노테이션을 클래스에 부여한다.      
  4. 스프링 프레임워크에서 인스턴스를 생성한다. 
     ==>  인스턴스를 생성하려면 클래스에 인스턴스 생성 어노테이션(표식)을 부여해 주어야 한다. 
             @Repository  @Service  @Bean   @Componet

    컴포넌트 스캔을 한 후 DI 는 인스턴스 생성 어노테이션이 부여된 클래스 추출 
   
    ( 인스턴스 생성 어노테이션) 
    @Controller   => 인스턴스 생성시 스프링MVC 이용시 컨트롤러 부여
    @Service       =>  인스턴스 생성시 트랜잭션 경계가 되는 도메인(서비스)기능에 부여
    @Repository  => 인스턴스 생성시 데이터베이스 액세스(리포지토리) 기능에 부여 
    @Componet   => 인스턴스 생성시위 용도 이외에 클래스에 부여 

  5. 인스턴스를 이용하고 싶은 곳에 어노테이션을 부여한다. 
    
    @Autowired   : 생성된 인스턴스를 이용하는 클래스에 참조를 받는 필드를 선언하고 필드위에 부여한다. 

  6. @Autowired 를 필드 인젝션  , setter() 인젝션  

     스프링3 이후부터는 생성자 주입 방식을  권장하고 있다. 

    - 주입 받아야 할 객체의 변수는 final 작성 
    - 생성자를 이용해서 해당 변수를 생성자의 파라미터로 지정 


  7. 인터페이스를 이용한 느슨한 결합이란 나중에 다른 클래스의 객체로 쉽게 변결할 수 있도록 하겠다. 

  
  8. @Primary     주입해야 할 빈이 1개 이상이라면 @Primary 를 이용하여 우선순위를 정해준다. 


  9. @Qualifier  :  빈의 이름을 지정하여 특정한 이름의 객체를 주입받는 방식


10 . 스프링 빈(Bean)으로 등록되는 객체들은 "핵심배역"을 담당하는 객체이다.
     핵심배역 :  오랜시간동안 프로그램내에서 상주하면서 중요한 역할  (비지니스 로직을 처리)
     VO, DTO 는 빈을 등록을 할까요? 아니다.
      - 데이터에 중심을 두고 설계된 객체이기 때문에 , 특히 DTO 는 생명주기가 짧고 , 데이터 보관이 주요 역할이므로 빈으로 처리하지 않는다.


     - XML, 어노테이션으로 처리하는 객체의 구분 기준은 무엇인가?
       판단 기준 : 코드를 수정할 수 있는가?
       예) jar 파일로 추가되는 클래스의 객체를 스프링의 빈으로 처리해야 하는 경우 => XML 의 <bean> 처리하고
           직접 작성하는 클래스는 어노테이션을 사용하는 것을 권장한다.


11. ApplicationContext 가 웹 어플리케이션에서 동작하려면

    웹 애플리케이션이 실행될 때, 스프링을 로딩해서 해당 웹 어플리케이션 내부에 스프링의 ApplicationContext를 생성하는 작업이 필요하다.

12. 스프링프레임워크는 웹과 관련된 작업은 "spring-webmvc" 라이브러리가 담당하므로 build.gradle 에 해당 라이브러리 추가


13. WEB-INF/ 폴더 아래에 web.xml (웹 어플리케이션의 배치관리자 DeployDescriptor)   <listener>설정과 listener에 필요한 <context-param> 추가


14. DataSoucre 구성하기
   톰캣과 스프링이 연동되는 구조를 완성한 후
   웹 애플리케이션의 필수 기능인 데이터베이스 관련 설정을 해야한다.


15. HikariCP 설정을 하여 Connection Pool 이용하기
    프로젝트에서 Connection 생성은 Connection Pool  HikariCP  라이브러리 사용
    implementation group: 'com.zaxxer', name: 'HikariCP', version: '5.0.1'


    설정 방법
    1. HikariConfig 타입의 객체 생성
       Connection Pool 설정을 위한 정보를 저장하는 환경셋팅 객체

    2. HikariConfig 객체를 이용하여 HikariDataSource 객체 생성
       - getConnection()를 이용하여 DB로부터 Connection을 받아와 사용할 수 있게 된다.

    3. ConnectionTests를 통해 테스트 진행

728x90
반응형