방법론(methodology)

방법론로그/OOAD 2011. 4. 12. 15:17



소프트웨어 방법론의 개발 프로세스이자 일반적인 문제 해결 과정을 알아보자.

아래 내용은 박병준 선생님의 가르침을 바탕으로 정리한 내용들이다!! 감솨합니다 샘!!
이것을 이해하고 자기의 것으로 어떻게 만드느냐는 개인의 몫!

아래 그림은 일반적인 개발 프로세스들과 그 프로세스를 지원하기 위해  작성하는 문서들이다. 
물론 이런 문서들이 항상 고정되어 있는 것은 아니다. 개발하고자는 업무영역에 따라 도움이 된다면 더 많은 문서들을
작성할 수도 있고, 간소화 할수도 있다. 중요한 것은 대상을 얼마나 "다각도에서 이해하는냐" 이지 "무엇을 작성하느냐" 가
아니다.   
프로그램이란 해야할 일을 다른 사람에게 대신하게 하는 것이라는 느낌으로 , 단계별로  "주인과 종"을 예로 들어 설명했다.








1. 문제인식(Problem Recognition)
개발 프로세스의 가장 첫번째 과정이다.  "누가, 무엇을 원하는가" 를 정의하는 단계이다. 
"누구" 는 반드시 한 사람이라고 할 수 없다. 문제에 연관되어 있는 다양한 사람들을 도출하는 하는 것이 첫번째 단계이고, 
이들이 각각 무엇을 원하는지 도출하는 것이 두 번째 단계이다. 






누구를 만족시킬 것인가? 그 누구가들이 바라는 것들은 무엇인가? 를 도출하는 과정 

그렇다면 문제는 어떻게 인식하는가? 앞서 문제는 왜 생기는가? 그것은 사람이기 때문이다. 
사람이기 때문에 필연적으로 문제는 생기기 마련이다. 즉 사람이 모든 문제의 시작점이 되야 한다. 
하지만 누군가는 모든 사람들을 의미하는 것은 아니다. 수많은 사람들의 범주 가운데서, 좁혀지고 좁혀져
특정 집합에 속하는 사람들만이 우리가 만족시켜야 하는 사람군에 속한다. 이 집한군은 여러 군이 존재할 수 있으며
이렇게 이익과 해를 보는 사람들을 Stakeholder (이해당사자)라고 한다. 

ex) twitter를 예로 들어보자. 
사람들은 커뮤니케이션을 할 수 있는 수단을 필요로 했다. 가장먼저 대화를 하기 시작했으며, 공간의 제약을 극복하기위해
편지라는 것이 등장했다. 하지만 더빠른 전달을 위해 전보가 등장했다. 송수신을 더 잘하기 위해 전화가 등장했다.  나아가 
언제 어디서든 가능하게 하기 위해 핸드폰 또는  SMS가 등장하고 결국 twitter 에 이르게 된것이다. 

요약하면 Stakeholder를 도출하고,  그들이 원하는 기능을 도출하는 과정이 문제인식이라 정의할 수 있다.  







2. 정보수집(Requirement Gathering)
기존에 (오프라인에서) 업무가 어떤 절차에 의해 진행되어 왔는지를 파악하는 단계이다.  문제인식에서 도출한 기능별로
실제업무가 어떤 절차로 진행되는지를 시나리오 방식으로 기술하되 잠재적으로 데이터가 될수 있는 항목들을 명시한다. 
절차와 데이터를 함께 고려하면 혼선을 가져올 수 있기 때문에, 절차를 기준으로 먼저 기술하고 난후 데이터를 도출하는 것이
도움이 된다.




 
기존에 행해져 왔던 일의 전체과정을 보는 단계이다.  
즉 절차에 집중하는 단계이며, 데이터 또한 그 절차안에서만 의미를 갖는다. 
(Stakeholder 가 기존에 해당 목적을 달성해왔던 과정을 훑어 보는 과정)

ex) 인사관리시스템을 만들기 위해서는 인사관리 업무가 무엇인자 알아야 하지 않겠는가?





3. 분석(Analysis)
오프라인 업무에 시스템이 적용되기 위한 접합점이다.  정보수집 단계에서 작성한 시나리오를 바탕으로  사용자가
수행할 업무와 시스템이 수행할 업무를 분리하여 기술한다.  사용자의 절차, 시스템의 절차가 분리되어 기술하는 것이
좋으며 그 절차와 더불어 데이터 항목들을 도출해야 한다.  정보수집 단계에서는 없었던 데이터들이 시스템이 적용되면서
추가되거나,  데이터들에 대한  조건(유효성 검사)들이 추가된다. 




 
절차에서 어떤부분을 대신 시스템화 할 수 있는지 고민하는 과정이다. 
어디서부터 어디까지 대신 시킬 것인지에 따라 결과가 달라진다. 
종과의 약속 => 인터페이스
종에게 물어본후 답에 따라 그 일을 다르게 행하게 할 수 있다. => 입력
(Stackholder 에 따라 물어보는 부분이 달라 질 수 있다. )

종에게 대신 시킬 과정을 찾는 단계이며, 전체 절차는 변하지 않는다것에 주의한다. 





4. 아키텍처(Architecture)
종에게 대신 시키기 위해서 주인이 준비물을 지정하는 단계이다. 준비물에 무엇이냐에 따라서  종이 받아들이는 것과 
대신 수행한 일의 결과가 달라질 것이다. 

아키텍처는 Infra 와 Technology로 구성된다. 인프라는  하드웨어적인 준비물을 의미한다.
ex) 대리운전을 호출했다면, 차와 키, 톨비가 인프라

인프라가 있더라도 이를 사용할 수 있는 기술이 있어야 한다.
ex) 대리 운전기사가 차를 운적할 수 있어야 함


 





5. 설계(Design)
종에게 준비물을 사용하게 했을 때의 절차이다. 
전체 절차는 동일하지만, 준비물이 바뀜에 따라 절차가 조금씩 바뀌게 된다. 
=> 모든 생각이 끝나야 하는 단계. 생각을 안해도 되게끔 설계 단계까지 모든 것이 이루어져야 한다. 



 



6. 구현(Implementation)


7. 테스트(Test)
미리 예측한 결과를 확인하는 단계이다.  그렇다면 어느단계에서 예측하는가? => 바로 분석단계!
작은 단위로 하나하나 테스트 하는 것을 단위 테스트(Unit test) 라고 한다. 
전체시스템을 놓고 테스트 하는 것을 통합 (Integretaion test) 라고 한다. 
Close test는 개발사 자체조직 내에서의 테스트 
Open test는 서비스 이전에 일정한 사용자에 의한 테스트 


8. 배포(Deployment)
유기적인 장소에 하드웨어/소프트웨어들을 설치하는 단계


9. 서비스(Service)


10. 유지보수(Maintenance)

 

2011.03.08.Tues 아키텍처 발전역사

방법론로그/OOAD 2011. 3. 8. 23:30




소프트웨어 아키텍처는 연결되는 노드(컴퓨터)의 구성,  그로 인한 데이터 보안성과 공유성, 그리고 
데이터와 (처리)절차의 관점에서 바라보면 그 흐름을 쉽게 이해할 수 있다. 이 점에 초점을 맞추어 아키텍처의
발전역사를 알아보자. 


1. standalone
가장 초기의 SW 아키텍처로  독립적인 머신 단일머신에서 동작하는 형태이다.  
하나의 컴퓨터에 (프로그램의) 절차와 데이터가 모두 존재한다.
 


단일머신에 데이터가 존재하기 때문에 보안적으로 안전하지만, 해당 PC 사용자만이 데이터를 사용할 수 있다. 
즉 데이터의 공유성이 좋지 않다.  공유성 문제를 해결하기 위해 2-Tier 아키텍처가 등장하게 된다. 



2.  2-Tier
절차를 가지는 노드와 데이터를 가지는 노드가 분리되어 네트웍으로 연결된 아키텍처이다.
다수의 공유가 가능하게 되었지만,  다수의 사람들이 동일한 데이터에 접근하여 수정하여 되면, 데이터가 망가지게 된다. 
그래서 DataBase를 관리하는 시스템인 DBMS(DataBase Management System)을 두어,  동시 사용자들간에도 데이터를 이상없이
(무결성) 다룰 수 있도록 한다.  (Data+Base는 Data를 저장하고 있는 기지라는 의미를 갖는다. )
 



공유성 문제는 해결이 되었지만,  처리절차의  변경 요구사항이 생겼을 때,  모든 클라이언트 모두를 업데이트 해주어야 한다. 
유지보수의 관점에서는 엄청난 비용이 드는 문제점이다. 문제의 원인은  변경의 대상이 되는  절차가 모두 클라이언트 내에 
존재하기 때문이다. (비지니스 로직을 포함하는 이런형태의 클라이언트를 Fat 클라이언트라 한다.)
이 문제를 어떻게 해결하였을까? 다음 세대의 아키텍처를 알아보자.  



3. 2-Tier + Procedure
처리절차(비지니스 로직)를 Database에  포함시키도록 하여 유지보수 문제를 해결하였다.  처리절차를 다루는 요소를 
Procedure 라고 하며,  대부분의 현대 DBMS 에 지원하고 있다.  클라이언트는 처리로직을 가지고 있지 않으며, 단지 
Database에 접근하기 위한 인터페이스로서만 동작하게 되며 이런 형태를 Thin 클라이언트라 한다. 
(초창기 데이터베이스 시장은 Informix가 선점하고 있었으나,  Oracle 이 Procedure를 통해 시장 주도권을 장악할 수 있었다.)


유지보수의 문제를 멋지게 해결해주었지만, 그에 따른 문제가 발생하였다. 인터넷의 등장 그리고  클라이언트 PC 의 급증으로
절차와 데이터가 함께 있는  형태는 장점이자 시스템의 속도를  너무 느리게 하는 단점으로 작용하였다.  이 문제를  어떻게 
어떻게 해결하였을까? 다음세대의 아키텍처를 알아보자.  




4. 3-Tier
결합되어 있는 처리절차를 다시 분리하여, 처리절차를 전담하는 AS(Application Server)에 할당하여 구성한 아키텍처 형태이다. 
이후에는 다수의 AS 노드와  DataBase 노드를  클러스터링하여 병렬시스템으로 구축한 소위 N-Tier 아키텍처가 유지된다. 





5. 아키텍처의 발전역사
지금까지 알아본 아키텍처의 발전역사를 전체흐름은 아래 그림과 같다. 



(처리)절차와 데이터의 관점으로 보았을 때,   아키텍처 발전의 역사는 정반합의 연속임을 알 수 있다.  
(정반합이란 헤겔의 변증법을 도식화한 논리전개 방식의 하나) 

절차와 데이터가 한데 모여 있었던 standalone에서는 데이터 공유문제를 해결하기 위해 데이터와 절차를 2-tier구조로 
분리하여 해결하였다. 하지만 공유의 문제는 해결했지만,  유지보수성 문제가 발생하였다.  해결책으로 분리된 절차를
데이터베이스의 Procedure 형태로 결합하여 해결하였다. 하지만, 인터넷의 등장과 수많은 사용자들의 발생으로  데이터와 
절차의 결합은 다시 성능의 문제를 가져왔고, 절차를 AS(Application Server)로 분리하여 이 문제를 해결하였다. 
이상과 같이 아키텍처의 역사를 절차와 데이터의 관점에서 정반합의 연속으로 바라보면 이해하기 쉬워진다. 













컴퓨터의 신호전달 과정 
그 옛날 정보전달을 위해 사용되었던 봉화 => 불꽃 연기의 피어오름의 유무를 통해 정보전달 하였다. 
이때 불꽃이 어디서 피어오르는지(불꽃의 위치), 불꽃의 개수, 불꽃의 순서가 중요한 의미를 가지게 된다.  
(이진수를 사용한 정보전달의 시초) 




컴퓨터 내외부에서 일어나는 모든 정보전달은 전기를 통해서 일어난다.  키보드 자판을 두드려서  일어난 신호는 
전선을 통해 컴퓨터에 전달이 되며, ADC(Analog Digital Converter)에 의해 디지털 신호로 변경된다.  이 데이터는 
메모리 공간에 저장이 되며, 두뇌가 되는 CPU에 의해 해석이 된다. 
출력은 CPU에 의해 출력정보가 메모리에 저장이 되며, 이 정보가 Driver를 통해 아날로그 신호로 변환되고,  다시 전선을
통해 모니터로 전달이 된다. (모니터에선 다시 디지털로 변경하여 최종출력을 할것이다.)

메모리에 대한 접근은 반드시 OS를 통해서 이루어진다. 사용자는 직접적으로 메모리에 접근할 수 없다. 



HAL과 Driver
Driver는 HAL(Hardware Abstract Layer)의 구현체이다. 동일한 운영체제가 다양한 머신에서 동작하기 위해서는 각각의 머신을
제어할 수 있는 정보를 알고 있어야 한다. 하지만 수많은 하드웨어 정보를 운영체제가 포함하기에는 정보량이 너무 많아지게
된다.  그래서 HAL이라는 추상화 계층을 두어 운영체제는 특정 하드웨어에 종속적이지 않는 명령으로 하드웨어와 통신하려
한다.  각 하드웨어 제조사들이 제공하는  HW 제어정보를 담은 Driver는 이  HAL 계층에 결합 되어 실제적으로 하드웨어를
제어하는 나머지 퍼즐조각으로서 기능한다.   kenerl 입장에서는 HAL로 인해  어떤 하드웨어를 사용하는지 모르고도, 미리
정해진 표준화된 규칙을 통해 하드웨어를 제어할 수 있게된다. 
ex) 누가 일을 하는지에 상관없이 일을 할수 있게된다. 




API(Application Programming Interface) 
무엇인가 컴퓨터의 기능을 사용하기 위해서는 반드시 OS를 거쳐야 한다. 그리고 기능들은 각각 일련의 절차들로
구성되어 있다.  OS의 기능을 사용할 수 있도록, 절차들을 묶어내어 제공하는 것이 API이다. 
ex) 일이 어떤  절차로 구성되어 있는지 상관없이 그 일을 할 수 있게된다. 

※ 추상과 인터페이스는 프로그래밍에서 중요한 의미를 갖는다. 추상과 인터페이스가 무엇이며, 이들이 어떻게 
다르며 어떤경우에 사용되는지를 잘 알아두자. 



알고리즘 vs  자료구조
알고리즘과 자료구조는 어떻게 다른가? 
알고리즘이란 문제를 해결하는 절차이다. 문제를 다루다 보면 데이터를 다루게 다루게 되며, 이 데이터를 어떻게 
정리하느냐에 따라 문제해결을 빨리 할 수도, 느리게 할 수도 있다. 즉 자료구조란 문제를 빨리 해결하기 위해 데이터를
정리하는 방법이라 할 수 있다. 데이터란 절차 안에서만 그 의미를 갖기 때문에 절차로서의 알고리즘과 데이터로서의
자료구조는 뗄수야 뗄수 없는 관계에 있다. 






[OOAD] 요구사항 수집부터 분석까지

방법론로그/OOAD 2010. 12. 13. 19:42



OOAD(Object Oriented Analysis Development) 

OOAD 는 인간은 실수한다는 것을 전제하고  문제인식, 정보수집,  분석, 아키텍처, 설계, 구현, 테스트, 배포, 서비스, 

유지보수의 일련의 개발과정을 반복적으로 수행해나가며 점진적으로 개선해나가며 시스템을 구축하는 개발 방법론

이다.  

이 포스트에서는 각 단계에 대표되는 산출물들을 간략히 알아보도록 하겠다.   사실 각 단계가 무엇을 목표로 하는지가 

더 중요하지만 이에 관한 사항들은 추후에 포스팅 하도록 하겠다.  들어가기에 앞서,  "방법론은 산출물이 아니다" 라는

말만 명심해두자. 그 단계가 목표로 하는 것이 무엇이냐에 따라 도움이 되는 활동이라면 사실 어떠한 것도 산출물이 

될 수도 있다. 즉  OOAD는 각 단계에 필요한 산출물을 확정짓지 않는다는 것이다. 

소개될 산출물들은  Refinement(정제) 과정을 통해 끊임없이 수정되고 개선되어야 한다. 




문답서 (인터뷰)

고객이 정말로 무엇을 원하는지 요구사항을 수집하고  업무의 흐름을 파악하는 과정으로

고객과 최대한 자연스러운 대화를 이끌어내야 한다. 여러차례에 걸쳐 대화를 통해 문답서를 정련해 나간다. 

ex) 비디오 가게 회원관리 문답서

 


유스케이스

문답서를 바탕으로 시스템의 주체와 대상(액터), 그리고 업무의 핵심 서비스를 도출해 내는 과정이다.  

이 과정은 문답서에서 명사와 동사를 힌트로 하여 추출해 낼 수 있다.

 

 

절차서 

문답서를 바탕으로, 서비스 항목(기능)에 따라 비지니스 영역에서 업무가 어떠한 순서에 따라 일어나는지 정리한 문서이다.

이 문서는 정보수집과정에서 필요로하며,  시스템화 이전의 비스니스 업무가 어떻게 이루어졌는지 파악하는데 목적이 있다.

(이 단계에서 시스템적인 용어를 사용않고, 실제 업무(domain)에서 사용하는 용어를 사용한다)

ex) 회원관리 절차서

 


분석절차서, 요구사항 기술서(Service Requirement Specification)

기존 업무흐름에서 시스템이 대체할 영역을 반영하여 절차를 다시 기술한 문서로 시스템화의 첫 진입점이 된다. 

기존 업무가 시스템화 되었음을 가정하고, 그 절차를 기술하는 과정이다. 

ex) 분석 절차서

 


단어리스트

분석절차서를  바탕으로,  명사와 동사를 추출해서 나열하고,  그것들의 연관성과 책임을 식별하는 과정이다. 

객체지향 개발을 위한 진입점이라 할 수 있다.  명사는 데이터가 되며,  동사는 데이터에 대한 조작/처리가 된다.




CRC (Class Relation Collaboration) 

단어리스트에서 식별한 데이터와 그에 대한 처리를 관련있는 것들끼지 그룹화 하는 과정이다. 그 그룹들은 클래스의 후보들이

되며 이들 사이에  연관관계 또한 식별한다.  이 과정에서 각 그룹들을 카드화하여 서로 조합해보면서 각 기능을 수행할 최적의

그룹과 그 관계를  찾는 것이 좋은 방법이 된다.  이 방법을 개인적으로 해보지는 않았지만, 좀더 재사용성 좋고  견고한 SW가

되기 위해서 반드시 필요한 과정이라 생각한다. 



Domain Model

클래스들의 전체적인 관계에 초점을 맞추어 특정 플랫폼과 기술에 종속적이지 않게  도식화한 문서이다. 

도메인 모델의 클래스에는 범용타입의 데이터와 처리 메소드들도 표현된다. (메소드의 인자타입과 반환값도 표시됨) 

ex) 회원관리 단어리스트, CRC, Domain Model

 



Class Diagram

 Domain Model 에 아키텍처(Architectur) 에서 결정된 플랫폼과 기술,  언어들이 적용되어  실제 구현언어의 클래스들로 관계를 

도식화한 문서이다. (아키텍처를 적용하면, 3-tier, 웹, 클라이언트 등과 같은 아키텍처에 수반되는 역할을 갖는 클래스들이 

추가(결합)가 된다. )

ex) 회원관리 Class Diagram

 

 


Sequence Diagram

서비스 또는 기능별로 객체들의 상호작용(메소드 호출)을 시간순으로 도식화 한 문서이다. 

ex) Sequence Diagram

 


개인적으로   OOAD와 UML을 공부하면서, 항상 걸림돌이 되었던 부분이 절차와 데이터를 파악하고 나서, 객체지향 기술을

적용하는 부분이었다.   도출한 데이터와 절차를 바탕으로 절차지향적인 시스템으로 바꾸는 것은 어렵지 않은 일이다. 

반면  객체지향적으로 바꾼답시고 데이터를 그룹화하고 클래스에  Model, View, Controller 라는 이름을 붙히는 것이 늘 왠지 어색

하고 찝찝한 과정이었다.   지금 생각해 보면 단어리스트와 CRC 를 바탕으로 최적의 방법으로 그룹핑하여 Domain Model을 

도출하는 과정이 객체지향 프로그래밍 모델로의 첫번째 진입점이 된다고 생각한다.  두 번째는 웹 , 클라이언트/서버 아키텍처 

등이 결정되어  도메인 모델과 결합되는 부분이라 생각한다.  

 기존에는 아키텍처라는 과정을 간과했기 때문에  늘  부자연스움을 느꼈던  것 같다.  


 


[OOAD] 아키텍처, IA , 화면기준안, 스토리보드

방법론로그/OOAD 2010. 12. 13. 19:42


 

이 포스트에서는 아키텍처와 UI 디자인 단계의 산출물에 대해서 간략하게 알아볼 것이다..

아키텍처가 결정됨과 동시에 Programming 설계와 더블어 UI 설계를 시작하게 된다. UI 설계 단계의 산출물에는 

 IA, 화면기준안, 스토리 보드가 존재한다.  이들 하나하나에 대해서만 알아볼 것이며, 이것들을 하나의 흐름으로 

연관지어 설명하지는 않겠다. 이런것들이 무언인지만 파악하고, 추후 포스트에서 전체적인 흐름을 설명하겠다. 

 

1. 아키텍처(Architecture)

성능과 안정성 등과 같은 비기능적인 요구사항을 만족시키 위한 것으로, 시스템의 S/W 및 H/W 의 전반적인 구성을 포함한다.

흔히 stand alone, 2-tier , 3-tier, 혹은 웹 아키텍쳐, 애플리케이션 아키텍처 등과 특정 목적을 달성하기 위해 최적화된  소프트웨어

및 하드웨어의 구성을 의미한다. 

 stand alone : 단일 PC에서 동작하는 구성

 2-Tier : client와 데이터 및 그것을 처리하는 비지니스 로직을 갖는 DB, 2개 층으로 구성되는 시스템

 3-Tier : 비지니로직를 갖는 DB에 대한 부하를 분산하기 위해, 비지니스 로직을 WAS(Web Application Server)에 별도로                                 분리해 3개층으로 구성되는 시스템 형태. 여러 대의 WAS 를 마치 하나처럼  클러스터링하여 부하를 분담한다 

웹 아키텍쳐: 시스템의 접근이 웹으로 이루어지는 구성

애플리케이션 아키텍처: 시스템의 접근이 애플리케이션을 통해 이루어지는 구성

엔터프라이즈 아키텍처 : 시스템의 접근이 웹과 애플리케이션을 통해 이루어지는 구성

 

 

2. IA(Information Architecture)

인간이 소프트웨어를 이용하여 정보, 즉 Contents와의 접점에서 사용자가 편리하게 고민하지 않고  정보를 찾아 지식을 얻어 

갈 수 있도록 정보를 배치하는 과정 


 

3. UI 기준안

화면 구성의 전체적인 레이아웃과 일관적인 컨셉을 결정하는 단계



4. 스토리보드(Story Board)

IA와 UI 기준안을 바탕으로 각 서비스(기능)의 화면요소들을 배치하고 구성해보는 과정 

 


5. 그 외 용어

1) EJB(Enterprise Java Beans)

네트웍 커넥션 자원(Dao)과, 비지니스를 로직을 갖는 컨트롤러(Manager)와 같은 객체자원을 원격에서 대신 관리해주는

엔터프라이즈 서버 프레임웍. 

네트웍 커넥션은 Entity Bean, 비지니스 로직 컨트롤러는 Sesssion Bean으로 관리된다


2) Fail Over

프로세서, 서버, 네트웍 또는 데이베이스 등이 고장, 또는 유지보수시 시스템이 중단되는 것을 막기위하여

두 개의 이상의 시스템을 중복 구축하고, 고장, 유지보수 하는 1차 시스템의 기능을 그대로 2차 시스템이 수행하는 구조

(사용자에겐 아무일도 없었다는 듯이 인식된다)

 

3) RAC (Real Application Cluster)

여러대의 병렬 DB들을 마치 하나의 DB인 것처럼 사용할 수 있는 오라클 DB 클러스터링 기법

데이터베이스의 확장성과 성능향상의 장점이 있다.  


  • 뽀&쏭 2016.02.03 13:40 신고 ADDR 수정/삭제 답글

    핵심만 잘 정리되어 있어서 좋아요. ^^