강좌/Spring 3.0

007. 의존성 주입 DI 초급 마무리

여름나라겨울이야기 2013. 1. 19. 00:14
728x90

이번 강좌는 어렵습니다.  그냥 쭈욱 흩어보시고 밑에 결론만 보셔도 됩니다. ^^

 

IoC : 제어 역전 Inversion Of Control

DI : 의존성 주입 Dependency Injection

 

IoC 라고도 하고 DI 라고도 하고 때로는 IoC/DI 라고하는  제억 역전에서 말하는 의존성이 무엇인지 강좌들을 통해 살펴보았습니다.

 

가장 단순하게 표현하자면 "의존성이란 java 언어에서 new 다." 라고 제가 설명을 드렸죠.

사실 이해를 위해 최대한 단순하게 설명을 드린 것입니다. 더 많은 내용은 이일민님의 "토비의 스프링" 에 좋은 내용이 있습니다.

 

그리고 DI 외에 DL(Dependency Lookup 의존성 검색)이라고 하는 기법도 있습니다.

 

이걸 벤다이어그램(기억나시죠.. 학창 시절)으로 표현해 보면 아래와 같습니다.

 

IoC = { DI, DL, 기타 }

 

이렇게 집합으로 표시할 수도 있겠네요.

DL 에 대해서는 토비님이 책에서 워낙 잘 설명해 주셔서 제가 따로 설명하지는... 는 아니고 스프링에서 DI 만 사용하기 때문에 별도의 설명을 하지 않도록 하겠습니다.

 

 

그리고 스프링 DI 에 대해 설명을 못하고 가는 내용들 중에는

 

<property> 태그를 통해 주입할 수 있는 것들

 

Literal

Object

List

Set

Map
Properties

 

@Autowired 의 bean 선택 기준 변경

 

<bean ... autowire="byType"> - default 입니다.

<bean ... autowire="byName">

<bean ... autowire="constructor">

<bean ... autowire="autodetect">

 

스프링의 Bean Scope 관리

 

스프링이 관리하는 Bean 의 Scope 는 기본적으로 Singleton 입니다.

 

Singleton

Prototype

request

session

global-session

 

Bean 의 일생 - BeanFactory 상에서는 10 단계 / ApplicationContext 상에서는 11 단계

 

인스턴스화 > 프로퍼티 할당 > BeanNameAware 의 setBeanName() >

BeanFactoryAware 의 setBeanFactory() > ApplicationContext 의 setApplicationContext() >

BeanPostProcessor 의 사전초기화 > InitialingBean 의 afterPropertiesSet() >

BeanPostProcessor 의 후속초기화 >

빈을 사용할 준비 완료 >

컨테이너 종료 >

DisposableBean 의 destroy() > 커스텀 소멸 메서드 호출

 

이 외에도

 

* <bean> 설정 상속

* 추상 <bean> 설정

* 메소드 주입 - 메서드 대체 / Getter 주입

* 기타 등등...

 

결론...

여기까지 읽으시고도 머리가 안 아프시면 당신은 능력자.. 책들은 바로 이런 내용들을 장별로 묶어서 설명을 하죠.  이것 외에도 DI 에 관해 더 많은 내용들을 다루고 있죠.

 

과연 이중에 완벽히 알고 써야할 것은?

 

20/80 의 법칙이라고 들어보셨나요?  검색 강츄!!! ^^/

 

프로그래밍에서는 20/98 법칙이라고도 합니다(이건 검색 금지.. 제가 만들었어요. ㅡㅡ).

20% 의 지식이 98% 의 상황을 해결하는데 사용된다고 저는 감히 주장합니다.  나머지 80% 의 지식은 정말 정말 2% 도 안 되는 아주 아주 희한하고 거의 마주칠 확률이 적은 상황에서 능력을 발휘하게 됩니다.  그래서 우리는 그 2% 의 상황을 해결하는 사람들을 능력자라고 부르죠.  그런데 제 강좌 보시는 분 중에 능력자는 사절이라고 했으니.. 여긴 능력자 없으시겠죠.  저도 당연히 비능력자.. ㅡㅜ 

책도 어느 기술을 100% 다루지는 못하지만, 하나의 기술에 대해 책 3권 정도 보시면 그 기술을 어느 정도 흩어보셨다고 말하실 수 있습니다.  그런데 그 책에서 읽은 것 중에 스스로 몇 % 나 실무에서 적용하고 있는지를 생각하시면 20/98 법칙에 조금은 동조하실 있을 겁니다.

 

여긴 스프링 초급 강좌이니 DI 에 관해서 20% 의 지식도 아닌 약 5% 정도의 지식만을 그것도 제가 아무렇게나 이해한 내용을 정리한 겁니다. 

 

15% 는 책으로 채우세요(지금 당장은 하지 마시고요)

 

자 그럼 제가 하고 싶은 말은 "20% 의 지식에 만족하라" 일까요?

 

"예"라고 답하셨다면 절반만 맞추셨습니다. "아니오" 라고 답하셨어도 절반만 맞으셨습니다. 제가 생각하는 정답은 "아니예" 입니다.

 

초급일 때 "토비의 스프링"을 완벽하게 이해하려 하지 마세요.

 

 

그리고 제가 참고하고 있는 "토비의 스프링" 과 함께 학습 하고 있는 "스프링 인 액션" 도 완벽하게 이해하려고 하지마세요.

 

스프링 뿐만 아니라 새로운 지식을 접하실 때는 정독하려고 하지 마시고요.  반복과 다독으로 지식을 더해 가시는 걸 추천해 드립니다.  위 그림의 아래의 80% 지식은 사실 그때 그때 구글링, 책을 통해서 살펴보실 때 "아 예전에 이런 건 학습한 적 있어.. 기억이 새록새록 떠오르네" 이런 정도로 간직하고 계시면 됩니다.

 

제가 지향하는 학습법은 "연반추" 입니다.  역시 검색엔진에서 검색하시면 A4 한장 분량의 연반추 학습법을 보실 수 있습니다.  물론 그 연반추 방법도 자기에게 맞는 방식으로 조정하시고, 한번 더 IT 학습에 맞게 조정하셔서 적용하시면 될 듯 합니다.

 

특히 스프링은 정말 방대합니다.  하나의 문제에 하나의 해결책을 제시하는 것이 아니라 다양한 정도가 아니라 어머어마한 방식의 해결책을 제시하고 프로그래머가 스스로 선택하게 만듭니다.  스프링을 만든 로드 존슨 능력자께서는 개콘 애정남을 안 보신게 분명합니다. ^^

 

이게 스프링 학습을 어렵게 하는 이유라고 보시면 맞습니다.

 

따라서 제가 추천하는 방식은 하나의 주제에 접근하는 다양한 방식을 학습하시는게 아니라 가장 심플하고 이해하기 쉬운 하나의 방식을 먼저 학습하시고 소화하신 후에 다른 방식을 하나씩 하나씩 학습하시고 정복해 가시길 바랍니다.  이전에 제가 말씀 드렸던 프로그래머 3 대 스킬 중에 2번째인 D&C 에 해당한다고 할 수 있겠네요.  D&C 생각나지 않으시면 앞에 앞에.. 강좌 참고해주세요.  저는 친절하지 않습니다. ^^;

 

로드 조슨은 애정남이 아니라서 애매한 걸 정해주지 않고,

저는 차도남이라 내 여자가 아닌 분들에겐 친절하지 않고.. ㅡㅡ;

(그런데 저의 여자는 어디에.. ㅡㅜ)

 

그래도 저는 지난 강좌에서 @Autowired / @Resource / <property> 중에 정해 드렸습니다.

그렇다고 @Autowired 를 공부하지 말라고 한 걸까요?

그건 아니죠.  다른 개발자들이 작성한 소스에서는 @Autowired 를 사용했을 수 있고 그걸 이 글을 읽고 있는 분이 유지보수하게 될 수도 있으니 @Autowired 에 대한 흔적은 머리에 남겨두시는게 차후 복습하실 때 도움이 됩니다. ^^

 

프로그래밍 팁 중에 역사적으로 가장 유명했다는 다음 문구도 기억해 두시면 삶에 득은 아닐지언정 해를 피해 가실 수 있을 겁니다.

 

"당신이 지금 작성하는 소스를 역대 가장 잔혹한 연쇄 살인마가 유지보수하게 될 것라고 생각하고 작성하라"

 

다만 지금 스프링을 학습하는 단계이고, 혼자 프로젝트를 하시거나 모든 프로젝트 팀원이 <property> 를 사용하기로 합의했다면 <property> 외에는, 머리 속 저 한구석에 밀어두시라는 겁니다.  나중에 꺼내실 수 있도록 낚시줄 정도만 드리우시라는 거죠. ^^

 

이렇게 해서 스프링의 3대 핵심이라고 하는 DI 중에서도 가장 쉬운 부분을 마무리해 봅니다. 

더 깊은 DI 는 가장 쉬운 AOP 와 Abstraction 에 대한 이해를 마치시고 도전하시길 권장합니다.

 

제 강좌가 저의 게으름으로 늦어진다면 "스프링 인 액션" 의 "4장 빈과 AOP 의 만남"을 연반추 하시면 충분히 AOP 를 이해하실 수 있을 겁니다.

 

추상화는 "토비의 스프링" 몇장이더라.. 제가 지금 책이 없네요. ㅡㅡ;

 

잉? 추상화가 뭐냐구요??? 추상화가 Abstraction 이죠!!! (버럭)

 

추상화의 대가는 피카소죠. 피카소의 그림을 보시면 추상화를 이해하시는데 도움이 됩니다.  뻥치지 말라구요. 정말인데.. ^^  AOP 뒤에 추상화에 대해 알아 볼 때 증거를 제시하도록 하죠.

살짝 맛을 보여드리자면 광의의 추상화는 "클래스 모델링", 또 소의의 추상화 중에는 "인터페이스 추출" 이라는 것이 있습니다.

 

추상화는 객체 지향의 4대 특징이니까.. 잘 이해하고 계신거죠. ^^

객체 지향 4대 특징을 이해 못 하고 계시면 스프링 학습보다 객체 지향에 대한 이해부터 하시길 강츄합니다.  스프링은 객체지향 기술을 극도록 잘 사용하고 있는 프레임워크이니까요.

 

그럼 초급 강좌인 제 강좌에서 왜 객체지향은 언급하지 않았냐구요?

그건 제 책을 팔아먹기 위해..

언젠가 나옵니다.  지구가 멸망하기 전에 나오겠죠..

지금 3장 정도 쓴 것 같다는 기억이 가물가물... ㅡㅡ;

제 책 나오면 구매해 주실 분 손!!!!!

아마도 책 제목은 제 강좌 보셨다면 느끼셨겠지만 아마도 이런 류 일겁니다.

 

"다르게 설명한 객체지향 with Java - 부제: 프로그래밍을 배운 적 없는 독자를 위한 객체 지향 & Java"

자매책(?)으로는

"다르게 설명한 객체지향 with C# - 부제: 프로그래밍을 배운 적 없는 독자를 위한 객체 지향 & C#"

 

책 나오는 몇 년? 몇 십년? 을 기다리기 힘드시다구요.

개인 교습을 원하시면 삼겹살과 소맥 비용 들고 연락하세요. ^^

솔로 여성은 DC(제가 적당히 먹겠습니다)해 드립니다. ^^/

오시는 분에게는 제가 생각하는 향후 10년 먹고 살 기술에 대한 주제도 덤으로...

저 있는 곳이요? 서울, 안양, 구리.. 그 때 그 때 달라요.

 

이래 저래 넋두리와 IT 기술 학습법에 대한 이야기를 하다보니 길어졌네요.

 

여기까지 읽고 충분히 이해하셨다면

 

스프링 인 액션(3판) 의 3장까지

또는

토비의 스프링 3 의 4장까지

읽으시면서 이해를 더 하시면 되겠습니다.

 

그럼 다음 강좌는 초급 AOP 로 만나뵈어요.

이 글에 댓글 1개 이상 달리면 첫번째 AOP 강좌를 공개합니다. ^^;

첫번째 AOP 강좌에 댓글이 1개 달리면 두번째 공개.. 그런식으로 계속...

강좌를 아직 못 써서 이런 꼼수를 부리는 건 아닐 겁... ㅡㅡ;
전 나꼼수의 주인공이 아니라구요.

 

ExpertSpring30.zip

 

헛... 첨부 파일이 있네요.  딱 보니 소스 파일인듯 한데...

AOP 관련 6 개의 패키지가 추가로 들어있습니다. ^^

댓글 없으면 그냥 제가 짠 소스만 보고 이해를.. 불가능하실 걸요.

댓글.. 댓글... (댓글 놀이에 푹 빠진...)

댓글은 건강한 비판도 겸허히..

 

AOP 강좌 제목도 올려봅니다.

 

008. AOP - Aspect? 관점? 핵심관심사항? 횡단관심사항?

009. AOP 일단 덤벼 보자 - 실전편
010. AOP 일단 덤벼 보자 - 설명편
011. AOP 일단 덤벼 보자 - 용어편
012. AOP 일단 덤벼 보자 - POJO & XML 기반 AOP
013. AOP - 기초 완성
014. 애너테이션 기반 DI, AOP, 스프링 설정 파일


마라나타.. ^^

반응형