SlideShare a Scribd company logo
1 of 30
가내 수공업 시대에서 산업화 사회로
패러다임(Paradigm)
 한 시대의 지식인들의 합의로 형성된 지식의 집합체
 즉, 전문가들의 합의로 생성된 지식의 구조로서 사람들의 견해나 사
고에 영향을 준다.
 그러나 어떤 집단이 갖고 있는 생각의 틀(방식)만을 뜻하는 것은 아니
고, 개개인이 주어진 조건에서 생각하는 방식 또한 패러다임이라고
말한다.
 출처 : 위키피디아
소프트웨어 개발 패러다임
건물 사용자
요구사항 분석
건물 설계
시공
감리
건물 유지보수
S/W 사용자
요구사항 분석
S/W 설계
코딩
테스팅
S/W 유지보수
요구사항
명세서
설계
명세서
컴퓨터
프로그램
테스트 계획
 고전적인 폭포수 모델 (Waterfall model) 에서 시작.
 프로토타이핑, 나선형, 에자일 등 다양한 개발 방법론 (methodology) 분화
 그런데 이런 진화는 왜? 그리고, 어떻게 벌어진 걸까요?
태초에 소프트웨어가 창조되고… 코드가 많아지고, 작업 과정이 복잡해지고…
패러다임이 태어나기 이전 이야기…
 태초의 선지자 (software developer) 들은 수학자 혹은 과학자!
Aida, 혹은 러브레이스 백작 부인
게다가, 시인 바이런의 딸 (엄친딸!)
(http://shunman.tistory.com/99)
- 서브루틴(subroutine)
- 루프(loop)
- 점프(jump)
그리고, "if - then" 구문까지…
소프트웨어의 기본 개념을 창안.
앨런 튜링, 수학자이며 인공지능의 아버지
그리고, 암호학의 천재
하지만… 동성애자 혐의 받은 후, 독사과 물고 자살
최초의 패러다임은 어떻게 태어난 걸까요?
 최초의 프로그래머들은
컴퓨터(혹은 소프트웨어)의 동작 방식을 선형적(linear)
으로 설계했습니다.
 아마도, 수학적 혹은 절차적 사고에 익숙했기
때문인 듯 합니다.
 순서도(flow chart)와 구조적 프로그래밍(structured
programming) 기법이 발명되고, 절차적 사고에
기반한 방법론들이 소개됩니다.
그런데, 일어나야 하지 말아야 할 일들이…
출처 : 야후 미디어 카툰세상 [이말년 시리즈]
왜? 이런 일들이 벌어지는 것일까요?
김현남 님의 카툰, [게임 회사 이야기] 중에서…
프로그래머들이
다들 멍청해서…? 설마…!
왜? 이런 일들이 벌어지는 것일까요?
대개 코드와 그것을 작성한 개발자에게는 죄가 없습니다.
테스트 할 때는 정상적인 데이터를 이용해서 확인하니까요. 그렇죠?
하지만, 실제 운영할 때는 비정상 데이터가 빈발합니다.
매뉴얼 대로 되면 인생이 아니죠… 계획대로 된다면 다들 행복할 겁니다.
코드는 죄가 없다? 그러면…
그렇습니다! 문제는 ‘데이터’인 것입니다. (Bug = illegal data, may be…)
데이터가 ‘적합한 범위’를 벗어나지 못하게 해야 하는 것이죠.
절차(procedure)와 명령(code) 뿐만 아니라, 데이터를 중시해야 합니다.
객체 간의 상호 작용으로 설계하자.
절차지향 프로그래밍에서… 객체지향 프로그래밍으로…
참고 : http://bopboy.tistory.com/725
 여전히 코딩은 뜨개질이 아닐까요?  소프트웨어도 조립 생산이
가능하지 않을까?
그래서, 살림 좀 나아지고 계십니까?
하지만, 우리는 여전히 연애 보다
코딩을 좋아하죠… 그러니 안 될 거야 아마…
소프트웨어 개발 패러다임이 변했지만…
전자/기계/건설은 어떻게 수공업을 벗어난 걸까?
 가내 수공업에서 조립 생산으로 이전하게 된 원리
‘조립 생산(assembly line)’
 전체는 부분의 합보다 크다.
The whole is more than
the sum of parts.
(아리스토텔레스)
소프트웨어를 부품화 하기 위한 기법들
 제품(whole product)을 조립하려면,
블랙박스(black box) 형태의 부품(parts)이 필요.
 객체(object)라는 부품을 제작하고 재사용하기 위한
다양한 기법들이 소개되었죠.
 하지만… 몇 가지 기법은 실패한 듯 합니다.
객체지향의 다양한 기법들
 클래스 선언 및 정의(class declaration & definition)
 상속(inheritance)과 구성(aggregation)
 데이터 캡슐화(data encapsulation)
 다형성 (polymorphism)
 정보 은폐 (information hiding)
 디자인 패턴 (design patterns)
그런데 모든 기법들이 정말 유용할까요?
OOP 태초에 상속(inheritance)이 발명되었으나…
행정자치부 사무 문서 규정에 따른 서식의 종류
내부결재, 대내발송, 대외발송, 일괄기안, 회계결의서 기안, 간이서식 등
기안 결재 분류 및 편철 등록
접수(기안) 담당자 지정 선람(공람) 분류 및 편철 등록
생산문서 흐름도
접수문서 흐름도
다양한 서식
동일한 툴바(기능)
유사한 워크 플로우
전자문서 시스템
설계 사례 !!!
• 다양한 서식을 지원해야 한다.
• 서식의 형태(form)은 유사하다.
• 서식 별로 거의 동일한
기능(menu)을 제공한다.
• 유통 흐름(workflow)이
유사하다.
뚱뚱한 상위 클래스와 허약한 하위 클래스
대내발송내부결제
전자문서
회계결의서 간이서식
Fat parent class
• 공통 기능을 상위 클래스에서 선언.
• 전자문서 클래스에서 기능 다수 구현.
• 복잡도 증가, 상위 클래스 = 툴 박스
• Core 개발은 협업 불가능!
문서 저장 (Body + Attach)
문서 발송 (담당자 → 승인자)
서명 날인 (전자서명, 이미지)
문서함 보관 (분류, 편철)
메모 작성 등… Thin child class
• Override 메소드로 인해 오히려 혼란
초래
(기본과 응용 메소드 호출 시 명칭이
동일함, 로그 이해 불가)
• 상위 클래스에 대한 의존성이
지나치게 높다.
• 하위 클래스가 100개가 넘으면 Panic
!!!
깨지기 쉬운 상위 클래스 (Fragile base class)
Television
Digital Camera, Frame
Mobile devices
Flash Apps (TV)
Flash Player FlashEngine
Flash Apps (Frame)
Flash Player
Flash Apps (Mobile)
Flash Player
깨지는 상위 클래스
• FlashEngine + Linux +
HAL (Hardware Abstraction Layer)
를 감싸는 공통 상위 클래스 작성
• 이상과 현실은 달랐다.
- 사운드 재생 방식이 다르고,
- 지원하는 동영상 디코더가 다르고,
- 비디오 버퍼 접근 방식이 다르더라.
• 상위 클래스 이름만 동일할 뿐,
코드는 일치하지 않는다.
(재사용은 꿈이 되었고…)
• 결론 : 합성(컴포지션)으로 설계 변경
상속 보다는 합성이 낫습니다.
 합성은 상속에 비해 결합도(the degree of coupling)가 낮습니다.
 게다가, 부품의 교체도 가능합니다.
 ‘바퀴를 다시 발명 하지 말라’ 는 명언이 있습니다.
세상에는 이미 필요한 코드들이
오픈 소스와 프레임워크 형태로 나와 있습니다.
 하지만 구슬이 서말 이라도 꿰어야 보배인 것이죠.
Spring Framework 의 가치
Spring Framework 는 소프트웨어 개발자를 위한 USB (포트)장치 입니다.
그리고, 소프트웨어 조립 생산 시대를 위한 첫 걸음이라고 여겨집니다.
금융 시스템 적용 사례
비즈니스 컴포넌트 Pool
채널 시스템
ARS
PDA
개인/기업
/프리미엄
TV
메신저
통합 Biz. 시스템
J2EE Framework 공통 컴포넌트
예외처리 다국어 로그 메시지 JDBC Routing
Service
Dispatcher
서비스
시간
고객원장
조회
이체한도
확인
Service
Controller
MainFrame
전자 금융
DB
Biz.
컴포넌트
TCP/IP
XML
Request
XML
Response XML
Request
Data Object
TCP/IP
XML
RMI/IIOP
XML Parser
Service flow overview
뱅킹 고객
Internet Explorer
or
Firefox
방화벽
WebLogic
10
form submit
or Ajax call
Struts
dispatcher
Spring Container
build components
(dependency injection)
Action
Message
Object
Message
Handler
Service
ID
BT
service
MCA (Host)
Banking
Service
Component
Struts 2 & Spring 2 service flow
Struts 2
Dipatcher
Web Request
Interceptor(s)
Struts 2 default &
Custom interceptor
Load Injected
Action & components
Execute
Dependency Injection
applicationContext.xml
struts.xml
Spring
Context Loader
Action
(injected)
Messaging
Service
Result
Render
JSP or JSON
Form submit or
Ajax call
HTML, Excel or
JSON formatted data
ORWrapper
Database
Execute
Query
Ajax flow overview
HTML page
(on Web
Browser)
javascript
module
(execute)
When user click menu
- execute function
USER
1. JAjax instance 생성
2. XmlHttpRequest 요청
Action
Result
BT server
javascript
module
(callback)
4. Resonse
render text/html
or JSON formatted data
3. Business
전문 송수신 및 비즈니스로직 수행.
5. Render page
redraw section
Web Browser WAS server
Ajax flow overview
execute ajaxCommSubmit()
Web Browser
menu
contents area
<div>
</div> 2. Redraw content
1. Reqeust service
execute ajaxCommSubmitCallback()
Web Browser
menu
contents area
<div>
</div> callback
2. Redraw content
1. Reqeust service
3. Execute callback
Four Message type
Case 1 : 인덱스 페이지
Case 2 : 전문을 송수신 하지 않는 액션
Case 3 : 전문을 by-pass 하는 액션
Case 4 : 전문 송수신 및 비즈니스 로직을 포함한 액션
Action 유형
 전체 초기 화면(main index page) 및 각 대 메뉴 초기 화면(top menu index page).
 화면 전체가 로드(load)되므로, Tiles 를 사용하여 화면 레이아웃(layout)을 구성한다.
 전문을 송수신하지 않지만, 비즈니스 로직을 구현해야 하는 액션.
 전문을 송수신 하지만 비즈니스 로직을 구현할 필요가 없는 액션
 전문 송수신 전, 후에 비즈니스 로직을 포함해야 하는 액션.
Four Message type – case 2
Case 2 : 전문을 송수신 하지 않는 액션
NormalAction
ReqServiceAction
① NormalAction 클래스를 상속하는 액션 클래스 생성
-액션 클래스 생성 및 비즈니스 로직 구현
② Spring 설정 추가
-액션 클래스 등록
③ Struts 설정 추가
-액션 클래스 등록
spring 2 configuration : {PRJ_HOME}/src/config/spring/applicationContext-struts.xml
<bean id=“reqServiceAction" scope="prototype"
class="com.bank.ebk.channel.pbk.web.struts2.action.service.ReqServiceAction"/>
struts 2 configuration : {PRJ_HOME}/src/config/struts/struts-pbk-service.xml
<action name="reqService" class="reqService">
<interceptor-ref name="Stack">
<param name="timeAccept.time">301</param>
</interceptor-ref>
<result name="success">/service/req_service_result.jsp</result>
</action>
Four Message type – case 3
Case 3 : 전문을 by-pass 하는 액션
① 전문 도메인 객체(domain object) 생성 및 등록
- 전문 도메인 객체 클래스 소스를 자동 생성.
- Spring 설정에 전문 도메인 객체를 등록.
② Struts 설정 추가
-액션 클래스 등록
struts 2 configuration : {PRJ_HOME}/src/config/struts/struts-pbk-service.xml
<action name="bizWpx1414" class="defaultBizAction">
<interceptor-ref name="Stack">
<param name="actionWiring.serviceId">TK01.WBP_1414</param>
<param name="actionWiring.inputMsg">wbp1414Input</param>
</interceptor-ref>
<result name="success">/biz/biz_result.jsp</result>
</action>
NeoFrame - 전문 저장소전문 도메인 객체 일괄 생성
전문 목록 수신
※ 전문 도메인 객체 생성 일괄 작업은 개발 리더가 수행한다.
Four Message type – case 4
Case 4 : 전문 송수신 및 비즈니스 로직을 포함한 액션
① 전문 도메인 객체(domain object) 생성 및 등록
- 전문 도메인 객체 클래스 소스를 자동 생성.
- Spring 설정에 전문 도메인 객체를 등록.
NeoFrame - 전문 저장소전문 도메인 객체 일괄 생성
전문 목록 수신
※ 전문 도메인 객체 생성 일괄 작업은 개발 리더가 수행한다.
BizAction
WcxLog1InAction
② BizAction 클래스를 상속하는 액션 클래스 생성
-액션 클래스 생성 및 비즈니스 로직 구현
② Spring 설정 추가
-액션 클래스 등록
spring 2 configuration : {PRJ_HOME}/src/config/spring/applicationContext-struts.xml
<bean id=“wcxLog1InAction" scope="prototype"
class="com.bank.ebk.channel.pbk.web.struts2.action.login.WcxLog1InAction"/>
총 정리
 소프트웨어 개발 패러다임은 ‘코드 중심’에서 ‘데이터 & 코드 결합’
으로 이전되었습니다.
 데이터와 코드가 결합된 객체가 발명됨으로써 ‘소프트웨어’를 조립
할 수 있는 제대로 된 ‘부품’이 탄생하였습니다.
 부품들을 수작업으로 혹은 강하게 결합하는 것은 여전히 수공업의
전통을 벗어나지 못하는 것입니다.
 코드를 짜는 기법 뿐 아니라, 코드들을 조립하기 위한 방법을 알아
야 합니다.
 상속 보다는 합성을 사용하고, 합성을 잘하기 위해서는 Spring 같은
프레임워크를 사용할 필요가 있습니다.
깨진 달걀을 낳는 닭이 되지 맙시다!

More Related Content

What's hot

[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
ChangKyu Song
 

What's hot (11)

스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
자바 네트워크 소녀 Netty 리뷰
자바 네트워크 소녀 Netty 리뷰자바 네트워크 소녀 Netty 리뷰
자바 네트워크 소녀 Netty 리뷰
 
Network 초보자를 위한 Netty
Network 초보자를 위한 NettyNetwork 초보자를 위한 Netty
Network 초보자를 위한 Netty
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
The platform 2011
The platform 2011The platform 2011
The platform 2011
 
아꿈사 발표 Node JS 프로그래밍 8장
아꿈사 발표 Node JS 프로그래밍 8장아꿈사 발표 Node JS 프로그래밍 8장
아꿈사 발표 Node JS 프로그래밍 8장
 
자바 메모리 릭 패턴
자바 메모리 릭 패턴자바 메모리 릭 패턴
자바 메모리 릭 패턴
 
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
 

Viewers also liked

2. 스마트폰으로 창조하는 유통 패러다임 - KT 문근재
2. 스마트폰으로 창조하는 유통 패러다임 - KT 문근재2. 스마트폰으로 창조하는 유통 패러다임 - KT 문근재
2. 스마트폰으로 창조하는 유통 패러다임 - KT 문근재
ideaguide
 
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다
동수 장
 
Web app 개발 방법론
Web app 개발 방법론Web app 개발 방법론
Web app 개발 방법론
Sang Seok Lim
 

Viewers also liked (20)

오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
2. 스마트폰으로 창조하는 유통 패러다임 - KT 문근재
2. 스마트폰으로 창조하는 유통 패러다임 - KT 문근재2. 스마트폰으로 창조하는 유통 패러다임 - KT 문근재
2. 스마트폰으로 창조하는 유통 패러다임 - KT 문근재
 
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다
 
Spring 4.x Web Application 살펴보기
Spring 4.x Web Application  살펴보기Spring 4.x Web Application  살펴보기
Spring 4.x Web Application 살펴보기
 
Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며
 
WAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apmWAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apm
 
톰캣 #03-설치
톰캣 #03-설치톰캣 #03-설치
톰캣 #03-설치
 
톰캣 #10-모니터링
톰캣 #10-모니터링톰캣 #10-모니터링
톰캣 #10-모니터링
 
톰캣 #06-db 연동
톰캣 #06-db 연동톰캣 #06-db 연동
톰캣 #06-db 연동
 
톰캣 #11-팁
톰캣 #11-팁톰캣 #11-팁
톰캣 #11-팁
 
자바 웹 개발 시작하기 (4주차 : MVC)
자바 웹 개발 시작하기 (4주차 : MVC)자바 웹 개발 시작하기 (4주차 : MVC)
자바 웹 개발 시작하기 (4주차 : MVC)
 
톰캣 #01-소개
톰캣 #01-소개톰캣 #01-소개
톰캣 #01-소개
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
 
Web app 개발 방법론
Web app 개발 방법론Web app 개발 방법론
Web app 개발 방법론
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
 
자바 웹 개발 시작하기 : 계획
자바 웹 개발 시작하기 : 계획자바 웹 개발 시작하기 : 계획
자바 웹 개발 시작하기 : 계획
 
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우
 
SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 

Similar to 프로그래밍 패러다임의 진화 및 Spring의 금융권 적용

모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
Dae Kim
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
Taekyu Lim
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
문기 박
 
웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)
Channy Yun
 
리눅스와 웹표준(2004)
리눅스와 웹표준(2004)리눅스와 웹표준(2004)
리눅스와 웹표준(2004)
Channy Yun
 

Similar to 프로그래밍 패러다임의 진화 및 Spring의 금융권 적용 (20)

웹기술 이해 (프론트엔드 기초)
웹기술 이해 (프론트엔드 기초)웹기술 이해 (프론트엔드 기초)
웹기술 이해 (프론트엔드 기초)
 
Html5
Html5 Html5
Html5
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Android
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
 
웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)
 
리눅스와 웹표준(2004)
리눅스와 웹표준(2004)리눅스와 웹표준(2004)
리눅스와 웹표준(2004)
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2
 
정해균 포트폴리오
정해균 포트폴리오정해균 포트폴리오
정해균 포트폴리오
 

More from 중선 곽

서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
중선 곽
 

More from 중선 곽 (20)

자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson
 
Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
 
사칙연산 프로그램
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 

프로그래밍 패러다임의 진화 및 Spring의 금융권 적용

  • 1. 가내 수공업 시대에서 산업화 사회로
  • 2. 패러다임(Paradigm)  한 시대의 지식인들의 합의로 형성된 지식의 집합체  즉, 전문가들의 합의로 생성된 지식의 구조로서 사람들의 견해나 사 고에 영향을 준다.  그러나 어떤 집단이 갖고 있는 생각의 틀(방식)만을 뜻하는 것은 아니 고, 개개인이 주어진 조건에서 생각하는 방식 또한 패러다임이라고 말한다.  출처 : 위키피디아
  • 3. 소프트웨어 개발 패러다임 건물 사용자 요구사항 분석 건물 설계 시공 감리 건물 유지보수 S/W 사용자 요구사항 분석 S/W 설계 코딩 테스팅 S/W 유지보수 요구사항 명세서 설계 명세서 컴퓨터 프로그램 테스트 계획  고전적인 폭포수 모델 (Waterfall model) 에서 시작.  프로토타이핑, 나선형, 에자일 등 다양한 개발 방법론 (methodology) 분화  그런데 이런 진화는 왜? 그리고, 어떻게 벌어진 걸까요? 태초에 소프트웨어가 창조되고… 코드가 많아지고, 작업 과정이 복잡해지고…
  • 4. 패러다임이 태어나기 이전 이야기…  태초의 선지자 (software developer) 들은 수학자 혹은 과학자! Aida, 혹은 러브레이스 백작 부인 게다가, 시인 바이런의 딸 (엄친딸!) (http://shunman.tistory.com/99) - 서브루틴(subroutine) - 루프(loop) - 점프(jump) 그리고, "if - then" 구문까지… 소프트웨어의 기본 개념을 창안. 앨런 튜링, 수학자이며 인공지능의 아버지 그리고, 암호학의 천재 하지만… 동성애자 혐의 받은 후, 독사과 물고 자살
  • 5. 최초의 패러다임은 어떻게 태어난 걸까요?  최초의 프로그래머들은 컴퓨터(혹은 소프트웨어)의 동작 방식을 선형적(linear) 으로 설계했습니다.  아마도, 수학적 혹은 절차적 사고에 익숙했기 때문인 듯 합니다.  순서도(flow chart)와 구조적 프로그래밍(structured programming) 기법이 발명되고, 절차적 사고에 기반한 방법론들이 소개됩니다.
  • 6. 그런데, 일어나야 하지 말아야 할 일들이… 출처 : 야후 미디어 카툰세상 [이말년 시리즈]
  • 7. 왜? 이런 일들이 벌어지는 것일까요? 김현남 님의 카툰, [게임 회사 이야기] 중에서… 프로그래머들이 다들 멍청해서…? 설마…!
  • 8. 왜? 이런 일들이 벌어지는 것일까요? 대개 코드와 그것을 작성한 개발자에게는 죄가 없습니다. 테스트 할 때는 정상적인 데이터를 이용해서 확인하니까요. 그렇죠? 하지만, 실제 운영할 때는 비정상 데이터가 빈발합니다. 매뉴얼 대로 되면 인생이 아니죠… 계획대로 된다면 다들 행복할 겁니다.
  • 9. 코드는 죄가 없다? 그러면… 그렇습니다! 문제는 ‘데이터’인 것입니다. (Bug = illegal data, may be…) 데이터가 ‘적합한 범위’를 벗어나지 못하게 해야 하는 것이죠. 절차(procedure)와 명령(code) 뿐만 아니라, 데이터를 중시해야 합니다.
  • 10. 객체 간의 상호 작용으로 설계하자. 절차지향 프로그래밍에서… 객체지향 프로그래밍으로… 참고 : http://bopboy.tistory.com/725
  • 11.  여전히 코딩은 뜨개질이 아닐까요?  소프트웨어도 조립 생산이 가능하지 않을까? 그래서, 살림 좀 나아지고 계십니까? 하지만, 우리는 여전히 연애 보다 코딩을 좋아하죠… 그러니 안 될 거야 아마… 소프트웨어 개발 패러다임이 변했지만…
  • 12. 전자/기계/건설은 어떻게 수공업을 벗어난 걸까?  가내 수공업에서 조립 생산으로 이전하게 된 원리 ‘조립 생산(assembly line)’  전체는 부분의 합보다 크다. The whole is more than the sum of parts. (아리스토텔레스)
  • 13. 소프트웨어를 부품화 하기 위한 기법들  제품(whole product)을 조립하려면, 블랙박스(black box) 형태의 부품(parts)이 필요.  객체(object)라는 부품을 제작하고 재사용하기 위한 다양한 기법들이 소개되었죠.  하지만… 몇 가지 기법은 실패한 듯 합니다.
  • 14. 객체지향의 다양한 기법들  클래스 선언 및 정의(class declaration & definition)  상속(inheritance)과 구성(aggregation)  데이터 캡슐화(data encapsulation)  다형성 (polymorphism)  정보 은폐 (information hiding)  디자인 패턴 (design patterns) 그런데 모든 기법들이 정말 유용할까요?
  • 15. OOP 태초에 상속(inheritance)이 발명되었으나… 행정자치부 사무 문서 규정에 따른 서식의 종류 내부결재, 대내발송, 대외발송, 일괄기안, 회계결의서 기안, 간이서식 등 기안 결재 분류 및 편철 등록 접수(기안) 담당자 지정 선람(공람) 분류 및 편철 등록 생산문서 흐름도 접수문서 흐름도 다양한 서식 동일한 툴바(기능) 유사한 워크 플로우 전자문서 시스템 설계 사례 !!! • 다양한 서식을 지원해야 한다. • 서식의 형태(form)은 유사하다. • 서식 별로 거의 동일한 기능(menu)을 제공한다. • 유통 흐름(workflow)이 유사하다.
  • 16. 뚱뚱한 상위 클래스와 허약한 하위 클래스 대내발송내부결제 전자문서 회계결의서 간이서식 Fat parent class • 공통 기능을 상위 클래스에서 선언. • 전자문서 클래스에서 기능 다수 구현. • 복잡도 증가, 상위 클래스 = 툴 박스 • Core 개발은 협업 불가능! 문서 저장 (Body + Attach) 문서 발송 (담당자 → 승인자) 서명 날인 (전자서명, 이미지) 문서함 보관 (분류, 편철) 메모 작성 등… Thin child class • Override 메소드로 인해 오히려 혼란 초래 (기본과 응용 메소드 호출 시 명칭이 동일함, 로그 이해 불가) • 상위 클래스에 대한 의존성이 지나치게 높다. • 하위 클래스가 100개가 넘으면 Panic !!!
  • 17. 깨지기 쉬운 상위 클래스 (Fragile base class) Television Digital Camera, Frame Mobile devices Flash Apps (TV) Flash Player FlashEngine Flash Apps (Frame) Flash Player Flash Apps (Mobile) Flash Player 깨지는 상위 클래스 • FlashEngine + Linux + HAL (Hardware Abstraction Layer) 를 감싸는 공통 상위 클래스 작성 • 이상과 현실은 달랐다. - 사운드 재생 방식이 다르고, - 지원하는 동영상 디코더가 다르고, - 비디오 버퍼 접근 방식이 다르더라. • 상위 클래스 이름만 동일할 뿐, 코드는 일치하지 않는다. (재사용은 꿈이 되었고…) • 결론 : 합성(컴포지션)으로 설계 변경
  • 18. 상속 보다는 합성이 낫습니다.  합성은 상속에 비해 결합도(the degree of coupling)가 낮습니다.  게다가, 부품의 교체도 가능합니다.  ‘바퀴를 다시 발명 하지 말라’ 는 명언이 있습니다. 세상에는 이미 필요한 코드들이 오픈 소스와 프레임워크 형태로 나와 있습니다.  하지만 구슬이 서말 이라도 꿰어야 보배인 것이죠.
  • 19. Spring Framework 의 가치 Spring Framework 는 소프트웨어 개발자를 위한 USB (포트)장치 입니다. 그리고, 소프트웨어 조립 생산 시대를 위한 첫 걸음이라고 여겨집니다.
  • 20. 금융 시스템 적용 사례 비즈니스 컴포넌트 Pool 채널 시스템 ARS PDA 개인/기업 /프리미엄 TV 메신저 통합 Biz. 시스템 J2EE Framework 공통 컴포넌트 예외처리 다국어 로그 메시지 JDBC Routing Service Dispatcher 서비스 시간 고객원장 조회 이체한도 확인 Service Controller MainFrame 전자 금융 DB Biz. 컴포넌트 TCP/IP XML Request XML Response XML Request Data Object TCP/IP XML RMI/IIOP XML Parser
  • 21. Service flow overview 뱅킹 고객 Internet Explorer or Firefox 방화벽 WebLogic 10 form submit or Ajax call Struts dispatcher Spring Container build components (dependency injection) Action Message Object Message Handler Service ID BT service MCA (Host) Banking Service Component
  • 22. Struts 2 & Spring 2 service flow Struts 2 Dipatcher Web Request Interceptor(s) Struts 2 default & Custom interceptor Load Injected Action & components Execute Dependency Injection applicationContext.xml struts.xml Spring Context Loader Action (injected) Messaging Service Result Render JSP or JSON Form submit or Ajax call HTML, Excel or JSON formatted data ORWrapper Database Execute Query
  • 23. Ajax flow overview HTML page (on Web Browser) javascript module (execute) When user click menu - execute function USER 1. JAjax instance 생성 2. XmlHttpRequest 요청 Action Result BT server javascript module (callback) 4. Resonse render text/html or JSON formatted data 3. Business 전문 송수신 및 비즈니스로직 수행. 5. Render page redraw section Web Browser WAS server
  • 24. Ajax flow overview execute ajaxCommSubmit() Web Browser menu contents area <div> </div> 2. Redraw content 1. Reqeust service execute ajaxCommSubmitCallback() Web Browser menu contents area <div> </div> callback 2. Redraw content 1. Reqeust service 3. Execute callback
  • 25. Four Message type Case 1 : 인덱스 페이지 Case 2 : 전문을 송수신 하지 않는 액션 Case 3 : 전문을 by-pass 하는 액션 Case 4 : 전문 송수신 및 비즈니스 로직을 포함한 액션 Action 유형  전체 초기 화면(main index page) 및 각 대 메뉴 초기 화면(top menu index page).  화면 전체가 로드(load)되므로, Tiles 를 사용하여 화면 레이아웃(layout)을 구성한다.  전문을 송수신하지 않지만, 비즈니스 로직을 구현해야 하는 액션.  전문을 송수신 하지만 비즈니스 로직을 구현할 필요가 없는 액션  전문 송수신 전, 후에 비즈니스 로직을 포함해야 하는 액션.
  • 26. Four Message type – case 2 Case 2 : 전문을 송수신 하지 않는 액션 NormalAction ReqServiceAction ① NormalAction 클래스를 상속하는 액션 클래스 생성 -액션 클래스 생성 및 비즈니스 로직 구현 ② Spring 설정 추가 -액션 클래스 등록 ③ Struts 설정 추가 -액션 클래스 등록 spring 2 configuration : {PRJ_HOME}/src/config/spring/applicationContext-struts.xml <bean id=“reqServiceAction" scope="prototype" class="com.bank.ebk.channel.pbk.web.struts2.action.service.ReqServiceAction"/> struts 2 configuration : {PRJ_HOME}/src/config/struts/struts-pbk-service.xml <action name="reqService" class="reqService"> <interceptor-ref name="Stack"> <param name="timeAccept.time">301</param> </interceptor-ref> <result name="success">/service/req_service_result.jsp</result> </action>
  • 27. Four Message type – case 3 Case 3 : 전문을 by-pass 하는 액션 ① 전문 도메인 객체(domain object) 생성 및 등록 - 전문 도메인 객체 클래스 소스를 자동 생성. - Spring 설정에 전문 도메인 객체를 등록. ② Struts 설정 추가 -액션 클래스 등록 struts 2 configuration : {PRJ_HOME}/src/config/struts/struts-pbk-service.xml <action name="bizWpx1414" class="defaultBizAction"> <interceptor-ref name="Stack"> <param name="actionWiring.serviceId">TK01.WBP_1414</param> <param name="actionWiring.inputMsg">wbp1414Input</param> </interceptor-ref> <result name="success">/biz/biz_result.jsp</result> </action> NeoFrame - 전문 저장소전문 도메인 객체 일괄 생성 전문 목록 수신 ※ 전문 도메인 객체 생성 일괄 작업은 개발 리더가 수행한다.
  • 28. Four Message type – case 4 Case 4 : 전문 송수신 및 비즈니스 로직을 포함한 액션 ① 전문 도메인 객체(domain object) 생성 및 등록 - 전문 도메인 객체 클래스 소스를 자동 생성. - Spring 설정에 전문 도메인 객체를 등록. NeoFrame - 전문 저장소전문 도메인 객체 일괄 생성 전문 목록 수신 ※ 전문 도메인 객체 생성 일괄 작업은 개발 리더가 수행한다. BizAction WcxLog1InAction ② BizAction 클래스를 상속하는 액션 클래스 생성 -액션 클래스 생성 및 비즈니스 로직 구현 ② Spring 설정 추가 -액션 클래스 등록 spring 2 configuration : {PRJ_HOME}/src/config/spring/applicationContext-struts.xml <bean id=“wcxLog1InAction" scope="prototype" class="com.bank.ebk.channel.pbk.web.struts2.action.login.WcxLog1InAction"/>
  • 29. 총 정리  소프트웨어 개발 패러다임은 ‘코드 중심’에서 ‘데이터 & 코드 결합’ 으로 이전되었습니다.  데이터와 코드가 결합된 객체가 발명됨으로써 ‘소프트웨어’를 조립 할 수 있는 제대로 된 ‘부품’이 탄생하였습니다.  부품들을 수작업으로 혹은 강하게 결합하는 것은 여전히 수공업의 전통을 벗어나지 못하는 것입니다.  코드를 짜는 기법 뿐 아니라, 코드들을 조립하기 위한 방법을 알아 야 합니다.  상속 보다는 합성을 사용하고, 합성을 잘하기 위해서는 Spring 같은 프레임워크를 사용할 필요가 있습니다.
  • 30. 깨진 달걀을 낳는 닭이 되지 맙시다!