58
봄 맞이 준비 운동 박성철 스프링 프레임워크 코어

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

봄 맞이 준비 운동

박성철

스프링 프레임워크 코어

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

발표자 소개

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

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

生卽苦

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

프레임워크가 뭐지?

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

프레임워크는…

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

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

- 한글 위키-

뭐라는거냐?

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

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) • 기본 행위 • 확장 가능 • 프레임워크 코드 수정 불가(바이너리 재사용)

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

스프링 프레임워크

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

스프링 언프레임워크

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

Java EE w/o EJB

범위가 무지 넓다는 뜻…

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

스프링 프레임워크는…

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

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

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.

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

순수 객체(POJO)

의존

관계

주입

Dependency Injection

관점

중심

프로그래밍

Aspect Orientated Programming

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

봄(스프링)의 대삼각형

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

…… 그래서 뭐?

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

과거 떠나는 시간 여행

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

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

복잡도 문제

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

소프트웨어 위기

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

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

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

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

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

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

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

시뮬라 67

객체 & 코루틴

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

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

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

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

역할

기능

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

UI/표현

애플리케이션

도메인

통합

인프라

멀티 레이어

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

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

UI Logic DAO

(Data Access Object)

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

AcmeUI

Acme Processor 완성

UI Logic DAO

AcmeLogic AcmeDAO

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

AcmeUI

Acme Processor + 개발용

UI Logic DAO

AcmeLogic

RealAcmeDAO

DevAcmeDAO

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

AcmeUI

Acme Processor + 테스트

UI Logic DAO

AcmeLogic

RealAcmeDAO

DevAcmeDAO

TestAcmeDAO

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

AcmeUI

Acme Processor +UI 테스트

UI Logic DAO

RealAcmeLogic

RealAcmeDAO

DevAcmeDAO

TestAcmeDAOFakeAcmeLogic

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

AcmeUI

Acme Processor + 테스트 자동화

UI Logic DAO

RealAcmeLogic

RealAcmeDAO

DevAcmeDAO

TestAcmeDAOFakeAcmeLogic

AcmeTestCase

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

AcmeUI

Acme Processor + 빅데이터

UI Logic DAO

RealAcmeLogic

RealAcmeDAO

DevAcmeDAO

TestAcmeDAO

FakeAcmeLogic

AcmeTestCase

RealBigAcmeDAO

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

스몰톡 - 80

최초의 OOP, 메시지 전달

…해줘 응. 여기~

그건 ~…는 뭐니?

A B

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

대면 대화 X

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

지인과의 전화 통화 X

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

맥도날드에서 주문하기 O

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

마법사

피예로

글린다

엘파바

네사로즈

딜라몬드

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

김선영

박혜나

김소현

김보영

이지훈

조상웅

남경주

이상준

마법사

피예로

글린다

엘파바

역할 배우

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

객체

메시지 (역할) 로직

인터페이스

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

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

원칙 #2

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

AcmeUI

Acme Processor

Logic DAO

AcmeLogic AcmeDAO

인터페이스

클래스

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

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

원칙 #3

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

AcmeUI

Acme Processor + 개발용

Logic DAO

AcmeLogic DevAcmeDAO

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

AcmeUI

Acme Processor +UI 테스트

Logic DAO

FakeAcmeLogic X

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

배역 구성

Logic DAO

RealAcmeLogic

RealAcmeDAO상용

DevAcmeDAO

개발

TestAcmeDAO

테스트

FakeAcmeLogic

UI테스트

AcmeTestCase

테스트

AcmeUI

RealBigAcmeDAO

빅데이터

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

다시 미래로 돌아 옵시다

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

순수 객체(POJO)

의존

관계

주입

Dependency Injection

관점

중심

프로그래밍

Aspect Orientated Programming

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

봄(스프링)의 대삼각형

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

육각형 아키텍처

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

인프라의 침투

유지 보수

어려움

테스트장애

개발 속도저하

결함 급증

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

비 침투적 스프링

POJO(순수 객체)

차단

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

순수 객체(POJO)

의존

관계

주입

Dependency Injection

관점

중심

프로그래밍

Aspect Orientated Programming

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

봄(스프링)의 대삼각형

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

애플리케이션 배역 구성

스프링배역 구성

객체객체 객체

객체

애플리케이션

구성 메타데이터(Configuration Metadata)

스프링 컨테이너 (Spring Container)

빈(Bean)

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

스프링 컨테이너

애플리케이션

빈(Bean)

구성 메타데이터

생성

빈(Bean)

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

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

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

• 그루비 빈 구성: 4.0 이상

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

스프링 컨테이너

애플리케이션

빈(Bean)

구성 메타데이터

생성

컨테이너

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

IoC vs DI

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

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

봄(스프링)의 대삼각형

순수 객체(POJO)

의존

관계

주입

Dependency Injection

관점

중심

프로그래밍

Aspect Orientated Programming

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

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

OOP의 한계

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

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

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

AOP

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

봄(스프링)의 대삼각형

순수 객체(POJO)

의존

관계

주입

Dependency Injection

관점

중심

프로그래밍

Aspect Orientated Programming

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

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

스프링 모듈

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

스프링의 특징

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

Page 55: 스프링 코어 강의 1부 - 봄 맞이 준비 운동
Page 56: 스프링 코어 강의 1부 - 봄 맞이 준비 운동
Page 57: 스프링 코어 강의 1부 - 봄 맞이 준비 운동
Page 58: 스프링 코어 강의 1부 - 봄 맞이 준비 운동