카테고리 없음

Spring 본격 수업 전에 막차 탑승 시도의 흔적

Empty_Bottle 2022. 10. 11. 01:46

 Spring이 중요한 이유

1. Dependency Injection

2. Transaction Management

일반적인 standard 소프트웨어를 만들 때에는 그렇게 중요하지 않을 수 있다.  하지만 Enterprise Application을 만들 때에는 위의 두 가지가 중요하다.

Transaction Management의 경우 다른 JDBC를 사용하면 되지 않는가에 대한 의문이 있을 수 있으나 JDBC 사용 시 dao나 service라고 하는 layer를 사용하여 프로그램을 만들 때 Connection이 끊어지는 함수들을 묶어서 하나의 Transaction을 관리해야 하는 일이 생긴다. (ex. pstmt.close; stmt.close;connection.close;) 계층 간의 트랜잭션 공유가 필요할 때 JDBC가 제공하고 있는 connection을 공유하기 어렵다. 그러한 면에서 Spring의 편의성이 좋다.

 

MVC와 트랜잭션 처리할 때 DI

 트랜잭션은 AOP

인증과 권한은 Servlet Filter

 

느슨한 결합력과 인터페이스

- 결합력: 한 소스코드를 수정하면 다른 소스 코드도 수정해야함.

 

DI(Dependency Injection) = 종속성 주입(부품 조립처럼 생각하면 됨.)

- Setter Injection: setter를 사용하여 

- Construction Injection: 생성자를 이용하여

IoC(Inversion Of Control) Container = 객체를 생성해서 담아두는 곳. 부품 컨테이너, DI 컨테이너.

- 스프링은 DI를 쉽게 해주는 기능이 있고 이를 위해 부품을 생성하는 컨테이너룰 사용한다. 부품(dependency)을 생성해서 담아놓는 것이 컨테이너인데 단순 생성뿐만아니라 생성 후 조립까지 해준다. 이 때 조립의 순서는 역순이다. 스프랑은 이러한 컨테이너의 조립의 기능을 강조하기 위해 역순 컨테이너(inversion of control container)라는 명칭으로 컨테이너를 명명했다.

 

외부로 빼서 직접적인 소스 코드 수정 없이 부품을 교체할 수 있도록 대신 하는 것이 스프링

두 번째 줄을 사용하다가 세 번째 줄로 변경해야할 때 매번 소스코드 변경을 해야하기 때문에 결합도가 높은 코드임. 해당 부분을 빼서 설정에서 관리한다면 설정파일만 변경하면 된다.

10번행의 name="exam"은 setExam 메소드를 의미한다. 생성한 객체를 참조시키므로 ref를 사용.

 

ApplicationContext context = new CalssPathXmlApplicationContext("config.xml");

에서 ApplicationContext의 종류

  • ClassPathXmlApplicationContext: 어플리케이션의 루트로부터 경로를 지정 (가장 보편적으로 사용)
  • FileSystemXmlApplicationContext: 컴퓨터의 파일 시스템 루트로부터 경로를 지정
  • XmlWebApplicationContext: 웹의 URL을 통해 지정
  • AnnotationConfigApplicationContext: annotation으로 지정

스프링의 어노테이션(Spring Annotation)

https://www.youtube.com/watch?v=S065KRjXRSY 유튜브 뉴렉처 채널

@Autowired

- 해당 변수 및 메서드에 스프링이 관리하는 Bean을 자동으로 매핑해주는 역할.

- 변수, Setter메서드, 생성자, 일반 메서드에 적용할 수 있다.

(@Resource의 경우 변수와 세터 메서드를 Bean의 이름으로 자동연결하지만 여러 인수를 받는 메서드의 경우 사용할 수 없다. 그러나 Bean의 타입이 Map인 경우 @Autowired가 제대로 작동하지 않기 때문에 @Resource를 사용한다.)

- 속성의 required=> 주입받을 의존 객체의 필수 여부를 나타내는 것으로 false로 설정하면 의존객체가 없더라도 Bean을 생성할 수 있다.

@Qualifier

- 유일한 Bean을 구별하고, 연결할 Bean의 값 타입을 지정할 수 있다. 

- Spring 컨테이너가 @Autowired를 설정한 필드, 생성자 등의 타입으로 후보 Bean을 찾는데 유일한 Bean을 찾지 못하게 되는 경우 에러가 발생한다. 이 경우 @Qualifier로 유일한  Bean을 구별할 수 있다.

 

= @Autowired로 자료형을 기준으로 연결하고 @Qualifier로 특정 id의 객체를 찾을 수 있다.

 

 

어노테이션으로는 두 개 이상의 객체를 생성할 수 없다는 한계가 있다.

 

나름 듣긴 했는데... 막차... 탑승할 수 있는 걸까...?ㅜ