Upload
sungchul-park
View
4.518
Download
0
Embed Size (px)
DESCRIPTION
사내에서 진행 된 스프링 웹 애플리케이션 개발 과정 중 스프링 코어 부분의 첫번째 발표 자료입니다.
Citation preview
봄 맞이 준비 운동
박성철
스프링 프레임워크 코어
발표자 소개
• 개발팀 팀장 • 코더 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
봄(스프링)의 대삼각형
…… 그래서 뭐?
과거 떠나는 시간 여행
소프트웨어 위기
소프트웨어 위기의 주요한 위기는 컴퓨터 성능이 몇 수십 배나 더 강력해졌기 때문입니다! 심하게 말하면, 컴퓨터가 없었을 때는 프로그래밍에는 전혀 문제가 없었습니다. 느린 컴퓨터 몇 개 뿐이었을 때는 프로그래밍이 조금 문제가 되었고, 이제는 거대한 컴퓨터에 프로그래밍도 따라서 거대한 문제가 되었습니다.
- 에츠허르 데이크스트라 @ 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 • 선언적 트랜잭션 • 테스트 용이성 • 엔터프라이즈 기술 통합 & 추상화 • 메타프로그래밍