[Spring] Spring DI

Spring

등장 배경

EJB 쓰다가 기능이 좋지만 복잡한 스펙으로 쓰기 어려움. 웹 사이트가 커지면서 엔터프라이즈 급의 서비스가 필요하게 됨. 세션빈에서 트랜잭션의 관리가 용이함. 로긴, 분산처리, 보안 등

자바 진영에서는 EJB가 엔터프라이즈급 서비스로 각광받음.

POJO(Plain Old Java Object)

  • 특정 프레임워크나 기술에 의존적이지 않은 자바객체
  • 특정 기술에 종속적이지 않아서 생산성 이식성 향상.
  • Plain: 컴포넌트 인터페이스를 상속받지 않는 특징(특정 프레임워크에 종속되지 않는)
  • Old: Ejb 이전의 자바클래스를 의미

  • 경량 프레임워크 : EJB가 제공하는 서비스를 지원해줄 수 있는 프레임워크 등장. Hibernate, JDO, ibatis(Mybatis), Spring

pring은 내부적으로 아무것도 안해도 싱글턴이며 팩터리 메서드가 지원이 된다. dto같은건 싱글턴 되면 안되지만 그거도 물론 설정이 가능.


20210427_095725

스프링은 기본적으로 싱글턴으로 만들어짐.

밑이 xml설정, 위가 어노테이션 설정

서비스는 dao 필요 중간에 프로퍼티 이용해서 멤버 dao라는 프로퍼티에

이 서비스라는 클래스 안에 public void set member라는 애가 있는 거

실제로 설정하는 하나하나의 객체를 컴포넌트라 한다.

이 컴포넌트 하위에는 웹 mvc의 경우 컨트롤러, 서비스 이렇게 있고 dao있는데 dao는 영속성(자료의 집합)이라 리포지토리로 관리 가능. dto같은 경우는 포함 안되니 그냥 @Component라 설정.

@autowired는 그냥 설정해두면 타입에 맞는걸 그대로 주입 시켜줌. 저 한줄에 의해 타입인 레퍼런스를 얻어서 바로 주입해줌. 쓰기 위해선 빈 스캐닝을 사용해야한다.

회원의 이름 관리하는 프로퍼티는 name

컴포넌트 스캔. 베이스 패키지에있는 모든클래스에서 검색해서 타입 맞는 거 주입시켜줌.

DI가 없으면 설정 못함. DI가 설정 한 애들 객체간의 결합을 느슨하게 만든다는 점이 중요.

생성자를 이용하는 방법도 있다.

프로퍼티 이용하는 법 사용하는 법이 2가지가 거의 같다.

컬렛션 넣는건 흔하지는 않을 것.


엔터프라이즈 환경 = 분산환경

의존관계

클래스와 클래스간에 존재하는 의존관계(의존도)를 낮추는 게 중요하다. 의존도가 높아지면 문제가 생길 수 있다.

20210426_125220

B를 가져다 쓰는게 A면 B가 바뀌면 A가 바뀌어야 할 수도 있다. C도 마찬가지.


컨테이너 기능

이용 되는 쪽 애들이 변동이 되 그걸 쓰는 애도 변경

20210426_125912

컨테이너 제공되는애가 활용이 안 되면 아무것도 안된다.

톰캣을 컨테이너라 불렀다. 컨테이너라는 애가 하는 기능 중 객체를 생성. 웹 할 때 클라이언트가 서버쪽으로 요청. hello servlet을 달라고 했다 치면 서블릿이 new 해서 생성한 적이 없음. 클라이언트는 HelloServlet 달라 요청만 하면 서버쪽의 톰캣이 요청 들어오면 들어와서 서블릿 여러개 중 내부에 톰캣이 생성한거.

20210426_130703

서비스를 이용하는 최종자는 A,B 신경 안 쓰고 중간에 낀 컨테이너(인력사무소)에 요청만 하면 된다.

bean 설정파일, 환경파일이라 부를 수 도 있다.

컨테이너라는 애가 객체를 미리 만들어서 공급해줘야 한다.

XML=컨테이너가 미리 생성해서 대기 시켜놓을 객체들에 관한 정보가 들어있음.

컨테이너가 미리 준비해야 되는데 a,b,c,d,e,f,g 를 준비해야 된다면 다 xml 문서에 언급 되어있어야 한다.

컨테이너 등장(스프링에서 제공) 객체를 미리 만들어서 대기시켜줌. 그리고 공급해줌.

공급기라는 용어가 사용 되기도 함. xml 문서가 나와야 뭘 만들라고 정보가 들어있음.


결론은 스프링은 쓰면 엔터프라이즈 어플리케이션을 만들때 편하다

근데 일반 메인함수 있는 어플리케이션 만들 때도 사용이 된다.(아까 맨처음 교시떄 쓰던거)

20210426_131624

자바는 src/main에 자바 코드 넣고 src/main/resource엔 자바코드가 아닌 xml문서를 넣는다.





© 2021.03. by yacho

Powered by github