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

30
가내 수공업 시대에서 산업화 사회로

Upload: sunny-kwak

Post on 18-Jul-2015

2.039 views

Category:

Software


10 download

TRANSCRIPT

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

가내 수공업 시대에서 산업화 사회로

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

패러다임(Paradigm)

한 시대의 지식인들의 합의로 형성된 지식의 집합체

즉, 전문가들의 합의로 생성된 지식의 구조로서 사람들의 견해나 사고에 영향을 준다.

그러나 어떤 집단이 갖고 있는 생각의 틀(방식)만을 뜻하는 것은 아니고, 개개인이 주어진 조건에서 생각하는 방식 또한 패러다임이라고말한다.

출처 : 위키피디아

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

소프트웨어 개발 패러다임

건물 사용자요구사항 분석

건물 설계

시공

감리

건물 유지보수

S/W 사용자요구사항 분석

S/W 설계

코딩

테스팅

S/W 유지보수

요구사항명세서

설계명세서

컴퓨터프로그램

테스트 계획

고전적인 폭포수 모델 (Waterfall model) 에서 시작.

프로토타이핑, 나선형, 에자일 등 다양한 개발 방법론 (methodology) 분화

그런데 이런 진화는 왜? 그리고, 어떻게 벌어진 걸까요?

태초에 소프트웨어가 창조되고… 코드가 많아지고, 작업 과정이 복잡해지고…

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

패러다임이 태어나기 이전 이야기…

태초의 선지자 (software developer) 들은 수학자 혹은 과학자!

Aida, 혹은 러브레이스 백작 부인

게다가, 시인 바이런의 딸 (엄친딸!)

(http://shunman.tistory.com/99)

- 서브루틴(subroutine)

- 루프(loop)

- 점프( jump)

그리고, "if - then" 구문까지…

소프트웨어의 기본 개념을 창안.

앨런 튜링, 수학자이며 인공지능의 아버지

그리고, 암호학의 천재

하지만… 동성애자 혐의 받은 후, 독사과 물고 자살

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

최초의 패러다임은 어떻게 태어난 걸까요?

최초의 프로그래머들은

컴퓨터(혹은 소프트웨어)의 동작 방식을 선형적(linear)

으로 설계했습니다.

아마도, 수학적 혹은 절차적 사고에 익숙했기

때문인 듯 합니다.

순서도(flow chart)와 구조적 프로그래밍(structured

programming) 기법이 발명되고, 절차적 사고에

기반한 방법론들이 소개됩니다.

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

그런데, 일어나야 하지 말아야 할 일들이…

출처 : 야후 미디어 카툰세상 [이말년 시리즈]

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

왜? 이런 일들이 벌어지는 것일까요?

김현남 님의 카툰, [게임 회사 이야기] 중에서…

프로그래머들이다들 멍청해서…? 설마…!

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

왜? 이런 일들이 벌어지는 것일까요?

대개 코드와 그것을 작성한 개발자에게는 죄가 없습니다.

테스트 할 때는 정상적인 데이터를 이용해서 확인하니까요. 그렇죠?

하지만, 실제 운영할 때는 비정상 데이터가 빈발합니다.

매뉴얼 대로 되면 인생이 아니죠… 계획대로 된다면 다들 행복할 겁니다.

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

코드는 죄가 없다? 그러면…

그렇습니다! 문제는 ‘데이터’인 것입니다. (Bug = illegal data, may be…)

데이터가 ‘적합한 범위’를 벗어나지 못하게 해야 하는 것이죠.

절차(procedure)와 명령(code) 뿐만 아니라, 데이터를 중시해야 합니다.

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

객체 간의 상호 작용으로 설계하자.

절차지향 프로그래밍에서… 객체지향 프로그래밍으로…

참고 : http://bopboy.tistory.com/725

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

여전히 코딩은 뜨개질이 아닐까요? 소프트웨어도 조립 생산이가능하지 않을까?

그래서, 살림 좀 나아지고 계십니까?하지만, 우리는 여전히 연애 보다

코딩을 좋아하죠… 그러니 안 될 거야 아마…

소프트웨어 개발 패러다임이 변했지만…

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

전자/기계/건설은 어떻게 수공업을 벗어난 걸까?

가내 수공업에서 조립 생산으로 이전하게 된 원리

‘조립 생산(assembly line)’

전체는 부분의 합보다 크다.

The whole is more thanthe sum of parts. (아리스토텔레스)

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

소프트웨어를 부품화 하기 위한 기법들

제품(whole product)을 조립하려면,

블랙박스(black box) 형태의 부품(parts)이 필요.

객체(object)라는 부품을 제작하고 재사용하기 위한

다양한 기법들이 소개되었죠.

하지만… 몇 가지 기법은 실패한 듯 합니다.

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

객체지향의 다양한 기법들

클래스 선언 및 정의(class declaration & definition)

상속(inheritance)과 구성(aggregation)

데이터 캡슐화(data encapsulation)

다형성 (polymorphism)

정보 은폐 (information hiding)

디자인 패턴 (design patterns)

그런데 모든 기법들이 정말 유용할까요?

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

OOP 태초에 상속(inheritance)이 발명되었으나…

행정자치부 사무 문서 규정에 따른 서식의 종류

내부결재, 대내발송, 대외발송, 일괄기안, 회계결의서 기안, 간이서식 등

기안 결재 분류 및 편철 등록

접수(기안) 담당자 지정 선람(공람) 분류 및 편철 등록

생산문서 흐름도

접수문서 흐름도

다양한 서식

동일한 툴바(기능)

유사한 워크 플로우

전자문서 시스템

설계 사례 !!!

• 다양한 서식을 지원해야 한다.

• 서식의 형태(form)은 유사하다.

• 서식 별로 거의 동일한

기능(menu)을 제공한다.

• 유통 흐름(workflow)이

유사하다.

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

뚱뚱한 상위 클래스와 허약한 하위 클래스

대내발송내부결제

전자문서

회계결의서 간이서식

Fat parent class

• 공통 기능을 상위 클래스에서 선언.

• 전자문서 클래스에서 기능 다수 구현.

• 복잡도 증가, 상위 클래스 = 툴 박스

• Core 개발은 협업 불가능!

문서 저장 (Body + Attach)

문서 발송 (담당자 → 승인자)

서명 날인 (전자서명, 이미지)

문서함 보관 (분류, 편철)

메모 작성 등… Thin child class

• Override 메소드로 인해 오히려 혼란

초래

(기본과 응용 메소드 호출 시 명칭이

동일함, 로그 이해 불가)

• 상위 클래스에 대한 의존성이

지나치게 높다.

• 하위 클래스가 100개가 넘으면 Panic

!!!

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

깨지기 쉬운 상위 클래스 (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)

를 감싸는 공통 상위 클래스 작성

• 이상과 현실은 달랐다.

- 사운드 재생 방식이 다르고,

- 지원하는 동영상 디코더가 다르고,

- 비디오 버퍼 접근 방식이 다르더라.

• 상위 클래스 이름만 동일할 뿐,

코드는 일치하지 않는다.

(재사용은 꿈이 되었고…)

• 결론 : 합성(컴포지션)으로 설계 변경

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

상속 보다는 합성이 낫습니다.

합성은 상속에 비해 결합도(the degree of coupling)가 낮습니다.

게다가, 부품의 교체도 가능합니다.

‘바퀴를 다시 발명 하지 말라’ 는 명언이 있습니다.

세상에는 이미 필요한 코드들이

오픈 소스와 프레임워크 형태로 나와 있습니다.

하지만 구슬이 서말 이라도 꿰어야 보배인 것이죠.

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

Spring Framework 의 가치

Spring Framework 는 소프트웨어 개발자를 위한 USB (포트)장치 입니다.

그리고, 소프트웨어 조립 생산 시대를 위한 첫 걸음이라고 여겨집니다.

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

금융 시스템 적용 사례

비즈니스 컴포넌트 Pool

채널 시스템

ARS

PDA

개인/기업/프리미엄

TV

메신저

통합 Biz. 시스템

J2EE Framework 공통 컴포넌트

예외처리 다국어 로그 메시지 JDBC Routing

ServiceDispatcher

서비스시간

고객원장조회

이체한도확인

ServiceController

Main

Fra

me

전자 금융DB

Biz.컴포넌트

TCP/IP

XML

RequestXML

Response XML

RequestData Object

TCP/IP

XML

RMI/IIOP

XML Parser

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

Service flow overview

뱅킹 고객

Internet Explorer orFirefox

방화벽

WebLogic 10

form submitor Ajax call

Struts dispatcher

Spring Container

build components(dependency injection)

ActionMessageObject

MessageHandler

ServiceID

BTservice

MCA (Host)

BankingService Component

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

Struts 2 & Spring 2 service flow

Struts 2Dipatcher

Web Request

Interceptor(s)

Struts 2 default &Custom interceptor

Load InjectedAction & components

ExecuteDependency Injection

applicationContext.xml

struts.xml

SpringContext Loader

Action(injected)

MessagingService

ResultRenderJSP or JSON

Form submit or Ajax call

HTML, Excel orJSON formatted data

ORWrapper

Database

ExecuteQuery

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

Ajax flow overview

HTML page(on Web Browser)

javascriptmodule(execute)

When user click menu- execute function

USER

1. JAjax instance 생성

2. XmlHttpRequest 요청

Action

Result

BT server

javascriptmodule(callback)

4. Resonserender text/htmlor JSON formatted data

3. Business전문 송수신 및 비즈니스로직 수행.

5. Render pageredraw section

Web Browser WAS server

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

Ajax flow overview

execute ajaxCommSubmit()

Web Browsermenu

contents area<div></div> 2. Redraw content

1. Reqeust service

execute ajaxCommSubmitCallback()

Web Browsermenu

contents area<div></div> callback

2. Redraw content

1. Reqeust service

3. Execute callback

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

Four Message type

Case 1 : 인덱스 페이지

Case 2 : 전문을 송수신 하지 않는 액션

Case 3 : 전문을 by-pass 하는 액션

Case 4 : 전문 송수신 및 비즈니스 로직을 포함한 액션

Action 유형

전체 초기 화면(main index page) 및 각 대 메뉴 초기 화면(top menu index page).

화면 전체가 로드(load)되므로, Tiles 를 사용하여 화면 레이아웃(layout)을 구성한다.

전문을 송수신하지 않지만, 비즈니스 로직을 구현해야 하는 액션.

전문을 송수신 하지만 비즈니스 로직을 구현할 필요가 없는 액션

전문 송수신 전, 후에 비즈니스 로직을 포함해야 하는 액션.

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

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>

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

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 - 전문 저장소전문 도메인 객체 일괄 생성

전문 목록 수신

※ 전문 도메인 객체 생성 일괄 작업은 개발 리더가 수행한다.

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

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"/>

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

총 정리

소프트웨어 개발 패러다임은 ‘코드 중심’에서 ‘데이터 & 코드 결합’으로 이전되었습니다.

데이터와 코드가 결합된 객체가 발명됨으로써 ‘소프트웨어’를 조립할 수 있는 제대로 된 ‘부품’이 탄생하였습니다.

부품들을 수작업으로 혹은 강하게 결합하는 것은 여전히 수공업의전통을 벗어나지 못하는 것입니다.

코드를 짜는 기법 뿐 아니라, 코드들을 조립하기 위한 방법을 알아야 합니다.

상속 보다는 합성을 사용하고, 합성을 잘하기 위해서는 Spring 같은프레임워크를 사용할 필요가 있습니다.

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

깨진달걀을낳는닭이되지맙시다!