스프링 코어 강의 1부 - 봄 맞이 준비 운동

Post on 27-May-2015

4.518 views 0 download

description

사내에서 진행 된 스프링 웹 애플리케이션 개발 과정 중 스프링 코어 부분의 첫번째 발표 자료입니다.

Transcript of 스프링 코어 강의 1부 - 봄 맞이 준비 운동

봄 맞이 준비 운동

박성철

스프링 프레임워크 코어

발표자 소개

• 개발팀 팀장 • 코더 since 1982 • 많이 망해봤어요. • 취미: 문제 해결법 찾기

生卽苦

프레임워크가 뭐지?

프레임워크는…

복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조이다. 간단히 뼈대, 골조(骨組), 프레임워크(framework)라고도 한다. 이렇게 매우 폭넓은 정의는 이 용어를 버즈워드

(buzzword)로서, 특히 소프트웨어 환경에서 사용할 수 있게 만들어 준다.

- 한글 위키-

뭐라는거냐?

Framework is…

an abstraction in which software providing generic functionality can be selectively changed by

additional user-written code, thus providing application-specific software.

• 제어 역전(IoC; inversion of control) • 기본 행위 • 확장 가능 • 프레임워크 코드 수정 불가(바이너리 재사용)

스프링 프레임워크

스프링 언프레임워크

Java EE w/o EJB

범위가 무지 넓다는 뜻…

스프링 프레임워크는…

스프링 프레임워크는 자바 플렛폼으로서 자바 애플리케이션을 개발하는데 필요한 하부 구조를 포괄적으로 제공합니다. 스프링이 하부 구조를 처리하므로 개발자는 애플

리케이션 개발에 집중할 수 있습니다.

Spring Framework is a Java platform that provides comprehensive infrastructure support for developing Java

applications. Spring handles the infrastructure so you can focus on your application.

순수 객체(POJO)

의존

관계

주입

Dependency Injection

관점

중심

프로그래밍

Aspect Orientated Programming

이식 가능한 서비스 추상화Portable Service Abstraction

봄(스프링)의 대삼각형

…… 그래서 뭐?

과거 떠나는 시간 여행

https://flic.kr/p/9waYuP

복잡도 문제

소프트웨어 위기

소프트웨어 위기의 주요한 위기는 컴퓨터 성능이 몇 수십 배나 더 강력해졌기 때문입니다! 심하게 말하면, 컴퓨터가 없었을 때는 프로그래밍에는 전혀 문제가 없었습니다. 느린 컴퓨터 몇 개 뿐이었을 때는 프로그래밍이 조금 문제가 되었고, 이제는 거대한 컴퓨터에 프로그래밍도 따라서 거대한 문제가 되었습니다.

- 에츠허르 데이크스트라 @ 1972 ACM 튜링상 수상 연설

F. L. 바우어, 1968, 나토 SW 공학 학회

http://commons.wikimedia.org/wiki/File:Rusty_tools.JPG

복잡도를 다루는 다양한 도구

시뮬라 67

객체 & 코루틴

범용 언어 = 알고리듬 구현 + 분해

저결합도 & 고응집도원칙 #1

역할

기능

기능 A 기능 B 기능 C 기능 D

UI/표현

애플리케이션

도메인

통합

인프라

멀티 레이어

객체로 SW를 만들어 보자Acme Processor

UI Logic DAO

(Data Access Object)

AcmeUI

Acme Processor 완성

UI Logic DAO

AcmeLogic AcmeDAO

AcmeUI

Acme Processor + 개발용

UI Logic DAO

AcmeLogic

RealAcmeDAO

DevAcmeDAO

AcmeUI

Acme Processor + 테스트

UI Logic DAO

AcmeLogic

RealAcmeDAO

DevAcmeDAO

TestAcmeDAO

AcmeUI

Acme Processor +UI 테스트

UI Logic DAO

RealAcmeLogic

RealAcmeDAO

DevAcmeDAO

TestAcmeDAOFakeAcmeLogic

AcmeUI

Acme Processor + 테스트 자동화

UI Logic DAO

RealAcmeLogic

RealAcmeDAO

DevAcmeDAO

TestAcmeDAOFakeAcmeLogic

AcmeTestCase

AcmeUI

Acme Processor + 빅데이터

UI Logic DAO

RealAcmeLogic

RealAcmeDAO

DevAcmeDAO

TestAcmeDAO

FakeAcmeLogic

AcmeTestCase

RealBigAcmeDAO

스몰톡 - 80

최초의 OOP, 메시지 전달

…해줘 응. 여기~

그건 ~…는 뭐니?

A B

대면 대화 X

지인과의 전화 통화 X

맥도날드에서 주문하기 O

마법사

피예로

글린다

엘파바

네사로즈

딜라몬드

김선영

박혜나

김소현

김보영

이지훈

조상웅

남경주

이상준

마법사

피예로

글린다

엘파바

역할 배우

객체

메시지 (역할) 로직

인터페이스

개방-폐쇄 원칙(Open-Closed Principle)

원칙 #2

AcmeUI

Acme Processor

Logic DAO

AcmeLogic AcmeDAO

인터페이스

클래스

의존관계 역전 원칙(Dependency Inversion Principle)

원칙 #3

AcmeUI

Acme Processor + 개발용

Logic DAO

AcmeLogic DevAcmeDAO

AcmeUI

Acme Processor +UI 테스트

Logic DAO

FakeAcmeLogic X

배역 구성

Logic DAO

RealAcmeLogic

RealAcmeDAO상용

DevAcmeDAO

개발

TestAcmeDAO

테스트

FakeAcmeLogic

UI테스트

AcmeTestCase

테스트

AcmeUI

RealBigAcmeDAO

빅데이터

다시 미래로 돌아 옵시다

순수 객체(POJO)

의존

관계

주입

Dependency Injection

관점

중심

프로그래밍

Aspect Orientated Programming

이식 가능한 서비스 추상화Portable Service Abstraction

봄(스프링)의 대삼각형

육각형 아키텍처

인프라의 침투

유지 보수

어려움

테스트장애

개발 속도저하

결함 급증

비 침투적 스프링

POJO(순수 객체)

차단

순수 객체(POJO)

의존

관계

주입

Dependency Injection

관점

중심

프로그래밍

Aspect Orientated Programming

이식 가능한 서비스 추상화Portable Service Abstraction

봄(스프링)의 대삼각형

애플리케이션 배역 구성

스프링배역 구성

객체객체 객체

객체

애플리케이션

구성 메타데이터(Configuration Metadata)

스프링 컨테이너 (Spring Container)

빈(Bean)

스프링 컨테이너

애플리케이션

빈(Bean)

구성 메타데이터

생성

빈(Bean)

• 스프링이 관리하는 컴포넌트성 객체 • POJO (인프라에 오염되지 않은 객체)

구성 메타 데이터(빈 정의)

• 애플리케이션 구성 정보(의존 관계 포함) • 다양한 메타 데이터 표현 방법: XML, 자바, 그루비 등 • Java 어노테이션, 어노테이션을 사용한 메타 데이터 표시 • Java 기반 구성 • 자바를 빈 설정용 DSL로 사용 • 스프링 3.0 이상, JavaConfig 프로젝트가 통합 • @Configuration, @Bean, @Import, @DependsOn • XML 없이 애플리케이션 구성 가능 • Java 어노테이션 방식의 완성

• 그루비 빈 구성: 4.0 이상

스프링 컨테이너

애플리케이션

빈(Bean)

구성 메타데이터

생성

컨테이너

• IoC 컨테이너 • 빈 생명 주기 관리 (생성, 초기화, 소멸) • 빈 의존 관계 설정 (의존관계 주입) • 애플리케이션 구성(configuration) ◦ 값 주입 ◦ 후처리 ◦ AOP

IoC vs DI

• DI = IoC의 한 형태 • DI = 비침투적 • 공장(Factory) 패턴, 전략 패턴

봄(스프링)의 대삼각형

순수 객체(POJO)

의존

관계

주입

Dependency Injection

관점

중심

프로그래밍

Aspect Orientated Programming

이식 가능한 서비스 추상화Portable Service Abstraction

OOP의 한계

• 횡단 관심사 문제: 상속 구조로 해결할 수 없는 중복 • 보안, 로깅, 트랜잭션 관리, 캐시, 에러 처리, 모니터링

• OOP로 해결하기엔 비용 급증

• 횡단 관심사의 관심사 분리 기술 • 인프라로부터 POJO를 보호 • 동적 프록시 기술 사용

AOP

봄(스프링)의 대삼각형

순수 객체(POJO)

의존

관계

주입

Dependency Injection

관점

중심

프로그래밍

Aspect Orientated Programming

이식 가능한 서비스 추상화Portable Service Abstraction

스프링 모듈

스프링의 특징

• 컴포넌트 기반 애플리케이션 구성/생애 관리 • 관심사 분리: 비침투적 기술, POJO, AOP • Effective Java • 선언적 트랜잭션 • 테스트 용이성 • 엔터프라이즈 기술 통합 & 추상화 • 메타프로그래밍