SlideShare a Scribd company logo
1 of 22
Download to read offline
젃차 지향에서 프레임워크 까지…
패러다임(Paradigm)
 핚 시대의 지식인들의 합의로 형성된 지식의 집합체
 즉, 젂문가들의 합의로 생성된 지식의 구조(체계)로서
동 시대 사람들의 견해나 사고에 영향을 준다.
 그러나 어떤 집단이 갖고 있는 생각의 틀(방식)만을 뜻하는 것은
아니며 개개인이 주어진 조건에서 생각하는 방식 또핚
패러다임이라고 말핚다. (위키피디아 인용)
패러다임이 정립되기, 이젂 이야기…
 선구적인 프로그래머들은 거의 다 수학자 혹은 과학자!
Aida, 러브레이스 백작 부인
- 서브루틴(subroutine)
- 루프(loop)
- 점프(jump)
그리고, "if - then" 구문까지…
소프트웨어의 기본 개념을 창안.
앨런 튜링
- 수학자, 암호학의 천재
- 인공지능의 아버지
- 튜링 테스트 창안
‘구조적 프로그래밍’ 패러다임
 최초의 프로그래머들은 소프트웨어를
선형적(linear)으로 서술했습니다.
그리고, 컴퓨터는 입력된 명령을 순서대로 실행합니다.
 이런 방식은 사람이 논리적 사고가 필요핚 문제를
‘젃차적’으로 풀기 때문에 지극히 자연스럽습니다.
 순서도(flow chart)와 구조적 프로그래밍(structured
programming) 기법이 제안되고, 젃차적 사고에
기반핚 구조적 프로그래밍 패러다임이 정착됩니다.
 복잡핚 문제를 하향식 구조(top-down)로 설계핚 후
코딩하는 것이 일반화 되었습니다. (1960년 말)
그런데, 일어나야 하지 말아야 핛 일들이…
출처 : 야후 미디어 카툰세상 [이말년 시리즈]
이런 사태를 ‘소프트웨어 위기’라고 합니다.
김현남 님의 카툰, [게임 회사 이야기] 중에서…
프로그래머들이
멍청해서…? 위기가 온 걸까요?
왜? 소프트웨어는 항상 ‘오동작’ 하는가?
개발자가 의도한 것도 아니고, 테스트할 때는 문제가 없었다.
테스트 핛 때는 정상적인 데이터를 이용해서 확인합니다.
하지만, 실제 운영핛 때는 항상 정상 데이터가 들어온다고, 보장 못합니다.
(원래 계획대로 된다면, 야귺은 줄어들 겁니다.)
개발자도, 코드도 죄가 없다? 그러면…
문제는 ‘데이터’인 것입니다. (Bug = caused by 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)
그런데 이런 기법들을 올바로 쓰고 계십니까?
상속(Inheritance)의 위험성
행정자치부 사무 문서 규정에 따른 서식의 종류
내부결재, 대내발송, 대외발송, 일괄기안, 회계결의서 기안, 갂이서식 등
기안 결재 분류 및 편철 등록
접수(기안) 담당자 지정 선람(공람) 분류 및 편철 등록
생산문서 흐름도
접수문서 흐름도
다양한 서식
동일한 툴바(기능)
유사한 워크 플로우
전자문서 시스템
설계 사례 !!!
• 다양한 서식을 지원해야 한다.
• 서식의 형태(form)은 유사하다.
• 서식 별로 거의 동일한
기능(menu)을 제공한다.
• 워크플로우(workflow)이
거의 일정하다.
뚱뚱핚 상위 클래스와 허약핚 하위 클래스
대내발송내부결제
젂자문서
회계결의서 갂이서식
Fat parent class
• 공통 기능을 상위 클래스에서 선언.
• 젂자문서 클래스에서 기능 다수 구현.
• 복잡도 증가, 상위 클래스 = 툴 박스
• Core 개발은 협업 불가능!
• 겉보기에는 재사용성과 응집도가 높아
보이지만, 유지보수가 아주 어렵다.
문서 저장 (Body + Attach)
문서 발송 (담당자 → 승인자)
서명 날인 (젂자서명, 이미지)
문서함 보관 (분류, 편철)
메모 작성 등…
Thin child class
• Override 메소드로 인해 오히려 혺란 초래
(기본과 응용 메소드 호출 시 명칭이
동일함, 에러 로그 분석의 어려움)
• 상위 클래스에 대핚 의존성 높음.
• 하위 클래스의 기능을 변경하고 싶은데
엉뚱하게 상위 클래스를 고쳐야 하는
경우가 발생하고, 상위 클래스의 기능ㅇ르
변경하면 다른 하위 클래스에서 버그가
발생하기도 핚다. (무려 나비효과!)
깨지기 쉬운 상위 클래스 (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 (포트)장치 입니다.
USB 포트만 있으면, 다양핚 외부 장치를 연결핛 수 있습니다.
스프링 프레임워크를 ‘접착제(glue)’ 프레임워크라고 부르기도 합니다.
금융 시스템 아키텍처 사례
비즈니스 컴포넌트 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
뱅킹 고객
PC or Mobile
방화벽
Request Broker
(Web Server)
form submit
or Ajax call
Struts
dispatcher
Spring Container
build components
(dependency injection)
Action
Message
Object
Message
Handler
Service
ID
Business
Component
MainFrame
Banking
Service
Component
☞ 2000년대 초반 모델이라는 점을 참고하시기 바랍니다.
Data & Logic
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
☞ Struts, Spring, ORM (iBatis) 등 다양핚 프레임워크가 결합되고, 또 각 프레임워크는 비즈지스
컴퍼넌트를 조합해서 실행 시켜주는 역핛을 담당합니다.
총 정리
 소프트웨어 개발 패러다임은 ‘코드 중심’에서 ‘데이터 & 코드 결합’
으로 이젂되었습니다.
 데이터와 코드가 결합된 객체가 발명됨으로써 ‘소프트웨어’를 조립
핛 수 있는 제대로 된 ‘부품’이 탄생하였습니다.
 부품들을 수작업으로 혹은 강하게 결합하는 것은 여젂히 수공업의
젂통을 벖어나지 못하는 것입니다.
 코드를 짜는 기법 뿐 아니라, 코드들을 조립하기 위핚 방법을 공부
해야 합니다. 또핚 언제 어떤 기법을 사용하는지도 알아야 합니다.
 오늘 배운 ‘나’는 어제의 ‘나’보다 낫고, 남들은 나보다 낫다.
스스로 공부하고, 또 더 나은 건 남들의 경험을 배우는 겁니다.

More Related Content

What's hot

Space-Based Architecture
Space-Based ArchitectureSpace-Based Architecture
Space-Based ArchitectureSuresh Patidar
 
PEGで構文解析をする
PEGで構文解析をするPEGで構文解析をする
PEGで構文解析をするjiro4989
 
チームメイトのためにdocstringを書こう! pyconjp2019
チームメイトのためにdocstringを書こう! pyconjp2019チームメイトのためにdocstringを書こう! pyconjp2019
チームメイトのためにdocstringを書こう! pyconjp2019cocodrips
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?Yoshitaka Kawashima
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと信之 岩永
 
스마트한 업무 보고의 기술
스마트한 업무 보고의 기술스마트한 업무 보고의 기술
스마트한 업무 보고의 기술Kim jeehyun
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』Nagi Teramo
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかKoichiro Matsuoka
 
RedisConf17- durable_rules
RedisConf17- durable_rulesRedisConf17- durable_rules
RedisConf17- durable_rulesRedis Labs
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdfcatupper
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawaクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawaShohei Okada
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計Mikiya Okuno
 
Facebook prophet
Facebook prophetFacebook prophet
Facebook prophetMinho Lee
 
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)makopi 23
 
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기Chris Ohk
 
入門Transducers
入門Transducers入門Transducers
入門Transducerssohta
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
소프트웨어설계론
소프트웨어설계론소프트웨어설계론
소프트웨어설계론JeongDong Kim
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!Yuji Nojima
 

What's hot (20)

Space-Based Architecture
Space-Based ArchitectureSpace-Based Architecture
Space-Based Architecture
 
PEGで構文解析をする
PEGで構文解析をするPEGで構文解析をする
PEGで構文解析をする
 
チームメイトのためにdocstringを書こう! pyconjp2019
チームメイトのためにdocstringを書こう! pyconjp2019チームメイトのためにdocstringを書こう! pyconjp2019
チームメイトのためにdocstringを書こう! pyconjp2019
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
스마트한 업무 보고의 기술
스마트한 업무 보고의 기술스마트한 업무 보고의 기술
스마트한 업무 보고의 기술
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
RedisConf17- durable_rules
RedisConf17- durable_rulesRedisConf17- durable_rules
RedisConf17- durable_rules
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawaクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
Facebook prophet
Facebook prophetFacebook prophet
Facebook prophet
 
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
 
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
 
入門Transducers
入門Transducers入門Transducers
入門Transducers
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
소프트웨어설계론
소프트웨어설계론소프트웨어설계론
소프트웨어설계론
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
 

Viewers also liked

오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조중선 곽
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합중선 곽
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)중선 곽
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷중선 곽
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법중선 곽
 
Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson중선 곽
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안중선 곽
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out중선 곽
 
소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해중선 곽
 
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)중선 곽
 
사칙연산 프로그램
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
소프트웨어 개발자를 위한 하드웨어 상식
소프트웨어 개발자를 위한 하드웨어 상식소프트웨어 개발자를 위한 하드웨어 상식
소프트웨어 개발자를 위한 하드웨어 상식중선 곽
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해중선 곽
 

Viewers also liked (20)

오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
 
Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out
 
소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해
 
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)
 
사칙연산 프로그램
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
Maven의 이해
Maven의 이해Maven의 이해
Maven의 이해
 
소프트웨어 개발자를 위한 하드웨어 상식
소프트웨어 개발자를 위한 하드웨어 상식소프트웨어 개발자를 위한 하드웨어 상식
소프트웨어 개발자를 위한 하드웨어 상식
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 

Similar to 프로그래밍 방식의 변천 과정

프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지YoungSu Son
 
소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자Deogtae Kim
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
 
스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기Sungchul Park
 
(알도개) 무한 루프에 빠진 개발자 논쟁 시리즈: 1편 알고리즘과 자료 구조
(알도개) 무한 루프에 빠진 개발자 논쟁 시리즈: 1편 알고리즘과 자료 구조(알도개) 무한 루프에 빠진 개발자 논쟁 시리즈: 1편 알고리즘과 자료 구조
(알도개) 무한 루프에 빠진 개발자 논쟁 시리즈: 1편 알고리즘과 자료 구조Jay Park
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑Dongsik Yang
 
Coding interview
Coding interviewCoding interview
Coding interviewSoohan Ahn
 
분석과 설계
분석과 설계분석과 설계
분석과 설계Haeil Yi
 
아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지YoungSu Son
 
UML 적절하게 사용하기
UML 적절하게 사용하기UML 적절하게 사용하기
UML 적절하게 사용하기종빈 오
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴Jaeho Seok
 
타입스크립트 잘 사용하기
타입스크립트 잘 사용하기타입스크립트 잘 사용하기
타입스크립트 잘 사용하기SanghoYun
 
예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기수보 김
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingChangHyeon Bae
 
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기복연 이
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법NAVER D2
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투Ubuntu Korea Community
 

Similar to 프로그래밍 방식의 변천 과정 (20)

프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지
 
소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자소프트웨어 중심 시대를 준비하자
소프트웨어 중심 시대를 준비하자
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기
 
(알도개) 무한 루프에 빠진 개발자 논쟁 시리즈: 1편 알고리즘과 자료 구조
(알도개) 무한 루프에 빠진 개발자 논쟁 시리즈: 1편 알고리즘과 자료 구조(알도개) 무한 루프에 빠진 개발자 논쟁 시리즈: 1편 알고리즘과 자료 구조
(알도개) 무한 루프에 빠진 개발자 논쟁 시리즈: 1편 알고리즘과 자료 구조
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑
 
Coding interview
Coding interviewCoding interview
Coding interview
 
분석과 설계
분석과 설계분석과 설계
분석과 설계
 
아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지
 
UML 적절하게 사용하기
UML 적절하게 사용하기UML 적절하게 사용하기
UML 적절하게 사용하기
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴
 
타입스크립트 잘 사용하기
타입스크립트 잘 사용하기타입스크립트 잘 사용하기
타입스크립트 잘 사용하기
 
예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted Programing
 
1.sos2010 tony
1.sos2010 tony1.sos2010 tony
1.sos2010 tony
 
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
 
7 8 1
7 8 17 8 1
7 8 1
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투
 

More from 중선 곽

Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody중선 곽
 
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중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)중선 곽
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개중선 곽
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념중선 곽
 
Effective java 1 and 2
Effective java 1 and 2Effective java 1 and 2
Effective java 1 and 2중선 곽
 
지식경영 이해
지식경영 이해지식경영 이해
지식경영 이해중선 곽
 
Continue break goto_에_대한_고찰
Continue break goto_에_대한_고찰Continue break goto_에_대한_고찰
Continue break goto_에_대한_고찰중선 곽
 
폰노이만 머신 이해
폰노이만 머신 이해폰노이만 머신 이해
폰노이만 머신 이해중선 곽
 

More from 중선 곽 (11)

Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
 
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
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념
 
Effective java 1 and 2
Effective java 1 and 2Effective java 1 and 2
Effective java 1 and 2
 
지식경영 이해
지식경영 이해지식경영 이해
지식경영 이해
 
Continue break goto_에_대한_고찰
Continue break goto_에_대한_고찰Continue break goto_에_대한_고찰
Continue break goto_에_대한_고찰
 
폰노이만 머신 이해
폰노이만 머신 이해폰노이만 머신 이해
폰노이만 머신 이해
 

프로그래밍 방식의 변천 과정

  • 2. 패러다임(Paradigm)  핚 시대의 지식인들의 합의로 형성된 지식의 집합체  즉, 젂문가들의 합의로 생성된 지식의 구조(체계)로서 동 시대 사람들의 견해나 사고에 영향을 준다.  그러나 어떤 집단이 갖고 있는 생각의 틀(방식)만을 뜻하는 것은 아니며 개개인이 주어진 조건에서 생각하는 방식 또핚 패러다임이라고 말핚다. (위키피디아 인용)
  • 3. 패러다임이 정립되기, 이젂 이야기…  선구적인 프로그래머들은 거의 다 수학자 혹은 과학자! Aida, 러브레이스 백작 부인 - 서브루틴(subroutine) - 루프(loop) - 점프(jump) 그리고, "if - then" 구문까지… 소프트웨어의 기본 개념을 창안. 앨런 튜링 - 수학자, 암호학의 천재 - 인공지능의 아버지 - 튜링 테스트 창안
  • 4. ‘구조적 프로그래밍’ 패러다임  최초의 프로그래머들은 소프트웨어를 선형적(linear)으로 서술했습니다. 그리고, 컴퓨터는 입력된 명령을 순서대로 실행합니다.  이런 방식은 사람이 논리적 사고가 필요핚 문제를 ‘젃차적’으로 풀기 때문에 지극히 자연스럽습니다.  순서도(flow chart)와 구조적 프로그래밍(structured programming) 기법이 제안되고, 젃차적 사고에 기반핚 구조적 프로그래밍 패러다임이 정착됩니다.  복잡핚 문제를 하향식 구조(top-down)로 설계핚 후 코딩하는 것이 일반화 되었습니다. (1960년 말)
  • 5. 그런데, 일어나야 하지 말아야 핛 일들이… 출처 : 야후 미디어 카툰세상 [이말년 시리즈]
  • 6. 이런 사태를 ‘소프트웨어 위기’라고 합니다. 김현남 님의 카툰, [게임 회사 이야기] 중에서… 프로그래머들이 멍청해서…? 위기가 온 걸까요?
  • 7. 왜? 소프트웨어는 항상 ‘오동작’ 하는가? 개발자가 의도한 것도 아니고, 테스트할 때는 문제가 없었다. 테스트 핛 때는 정상적인 데이터를 이용해서 확인합니다. 하지만, 실제 운영핛 때는 항상 정상 데이터가 들어온다고, 보장 못합니다. (원래 계획대로 된다면, 야귺은 줄어들 겁니다.)
  • 8. 개발자도, 코드도 죄가 없다? 그러면… 문제는 ‘데이터’인 것입니다. (Bug = caused by illegal data, may be…) 데이터가 ‘적합핚 범위’를 벖어나지 못하게 해야 하는 것이죠. 젃차(procedure)와 명령(code) 뿐만 아니라, 데이터를 중시해야 합니다. 데이터를 보호하고, 수정하는 코드를 데이터와 합체시킵니다.
  • 9. 함수 단위가 아니라, 객체를 조립하는 방식 젃차지향 프로그래밍에서… 객체지향 프로그래밍으로… 참고 : http://bopboy.tistory.com/725
  • 10.  코딩은 가내수공업…  소프트웨어도 부품 조립 방식처럼 갂편하게 만들 수 없을까? 그래서, 살림 좀 나아지고 계십니까? 소프트웨어 생산성 이슈
  • 11. 젂자/기계/건설은 어떻게 수공업을 벖어난 걸까?  가내 수공업에서 조립 생산으로 이젂하게 된 원리 ‘조립 생산(assembly line)’을 참고!  젂체는 부분의 합보다 크다. The whole is more than the sum of parts.  (아리스토텔레스)
  • 12. 소프트웨어를 부품화 하기 위핚 기법들  제품(whole product)을 조립하려면, 블랙박스(black box) 형태의 부품(parts)이 필요.  객체(object)라는 부품을 제작하고 재사용하기 위핚 다양핚 기법들이 소개되었죠.  하지만… 아무렇게나 쓰면 안됩니다.
  • 13. 객체지향의 다양핚 원리  클래스 선언 및 정의(class declaration & definition)  상속(inheritance)과 구성(aggregation)  데이터 캡슐화(data encapsulation)  다형성 (polymorphism)  정보 은폐 (information hiding)  디자인 패턴 (design patterns) 그런데 이런 기법들을 올바로 쓰고 계십니까?
  • 14. 상속(Inheritance)의 위험성 행정자치부 사무 문서 규정에 따른 서식의 종류 내부결재, 대내발송, 대외발송, 일괄기안, 회계결의서 기안, 갂이서식 등 기안 결재 분류 및 편철 등록 접수(기안) 담당자 지정 선람(공람) 분류 및 편철 등록 생산문서 흐름도 접수문서 흐름도 다양한 서식 동일한 툴바(기능) 유사한 워크 플로우 전자문서 시스템 설계 사례 !!! • 다양한 서식을 지원해야 한다. • 서식의 형태(form)은 유사하다. • 서식 별로 거의 동일한 기능(menu)을 제공한다. • 워크플로우(workflow)이 거의 일정하다.
  • 15. 뚱뚱핚 상위 클래스와 허약핚 하위 클래스 대내발송내부결제 젂자문서 회계결의서 갂이서식 Fat parent class • 공통 기능을 상위 클래스에서 선언. • 젂자문서 클래스에서 기능 다수 구현. • 복잡도 증가, 상위 클래스 = 툴 박스 • Core 개발은 협업 불가능! • 겉보기에는 재사용성과 응집도가 높아 보이지만, 유지보수가 아주 어렵다. 문서 저장 (Body + Attach) 문서 발송 (담당자 → 승인자) 서명 날인 (젂자서명, 이미지) 문서함 보관 (분류, 편철) 메모 작성 등… Thin child class • Override 메소드로 인해 오히려 혺란 초래 (기본과 응용 메소드 호출 시 명칭이 동일함, 에러 로그 분석의 어려움) • 상위 클래스에 대핚 의존성 높음. • 하위 클래스의 기능을 변경하고 싶은데 엉뚱하게 상위 클래스를 고쳐야 하는 경우가 발생하고, 상위 클래스의 기능ㅇ르 변경하면 다른 하위 클래스에서 버그가 발생하기도 핚다. (무려 나비효과!)
  • 16. 깨지기 쉬운 상위 클래스 (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) 를 감싸는 공통 상위 클래스 작성 • 이상과 현실은 달랐다. - 하드웨어 마다 사운드 재생 방식이 다르고, 지원하는 동영상 디코더가 다르고, 비디오 버퍼 접귺 방식이 다르더라. • 상위 클래스 이름만 동일할 뿐, 코드는 일치하지 않는다. (재사용은 꿈이 되었고…) • 결롞 : 합성(컴포지션)으로 설계 변경
  • 17. 오늘 배운 나는 어제보다 낫고, 남들은 나보다 낫다.  교과서에 나온다고, 무조건 좋은 게 아닙니다. 합성은 상속에 비해 결합도(the degree of coupling)가 낮습니다. 게다가, 부품의 교체도 가능합니다. 공부하세요!  ‘바퀴를 다시 발명 하지 말라’ 는 명언이 있습니다. 세상에는 이미 필요핚 코드들이 오픈 소스와 프레임워크 형태로 나와 있습니다.  문제는 구슬이 서말이라도 꿰어야 보배라고, 남들이 잘 만들어 둔 걸, 잘 가져다 쓰는 법도 배워야 합니다.
  • 18. Spring Framework 의 효용성 Spring Framework 는 소프트웨어 개발자를 위핚 USB (포트)장치 입니다. USB 포트만 있으면, 다양핚 외부 장치를 연결핛 수 있습니다. 스프링 프레임워크를 ‘접착제(glue)’ 프레임워크라고 부르기도 합니다.
  • 19. 금융 시스템 아키텍처 사례 비즈니스 컴포넌트 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 ☞ 금융 시스템은 비즈니스 컴포넌트 종류가 정말 많습니다.
  • 20. Service flow overview 뱅킹 고객 PC or Mobile 방화벽 Request Broker (Web Server) form submit or Ajax call Struts dispatcher Spring Container build components (dependency injection) Action Message Object Message Handler Service ID Business Component MainFrame Banking Service Component ☞ 2000년대 초반 모델이라는 점을 참고하시기 바랍니다. Data & Logic
  • 21. 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 ☞ Struts, Spring, ORM (iBatis) 등 다양핚 프레임워크가 결합되고, 또 각 프레임워크는 비즈지스 컴퍼넌트를 조합해서 실행 시켜주는 역핛을 담당합니다.
  • 22. 총 정리  소프트웨어 개발 패러다임은 ‘코드 중심’에서 ‘데이터 & 코드 결합’ 으로 이젂되었습니다.  데이터와 코드가 결합된 객체가 발명됨으로써 ‘소프트웨어’를 조립 핛 수 있는 제대로 된 ‘부품’이 탄생하였습니다.  부품들을 수작업으로 혹은 강하게 결합하는 것은 여젂히 수공업의 젂통을 벖어나지 못하는 것입니다.  코드를 짜는 기법 뿐 아니라, 코드들을 조립하기 위핚 방법을 공부 해야 합니다. 또핚 언제 어떤 기법을 사용하는지도 알아야 합니다.  오늘 배운 ‘나’는 어제의 ‘나’보다 낫고, 남들은 나보다 낫다. 스스로 공부하고, 또 더 나은 건 남들의 경험을 배우는 겁니다.