SlideShare une entreprise Scribd logo
1  sur  8
Télécharger pour lire hors ligne
1특집 부|아키텍트 편
144 2 0 0 5 . 1 2
엔
터프라이즈 시스템을 구축하는 프로젝트에서 아키텍처의 중
요성을 인식하고 아키텍트가 빠질 수 없는 역할로 등장한 것
은 그리 오래 되지 않았다. 그렇다고 해서 예전 시스템에 아키텍처가
없는 것은 아니다. 세상에 존재하는 모든 시스템은 아키텍처를 가질
수밖에 없다. 시스템이 존재하고 동작한다는 것 자체가 아키텍처를
가진다는 증거이다. 아무런 원칙 없이 마구잡이로 만들어진 시스템도
가끔 존재하지만 전산화 역사가 오래된 업종의 시스템은 아키텍처를
수립한다는 의식을 하지 않았을는지 몰라도 뚜렷한 원칙과 방향에 따
라 구축되었다. 이 원칙과 방향이 바로 아키텍처다.
금과옥조(金科 )
좋은 아키텍처란 무엇일까? 어떤 시스템이 화면에서 바로 데이터베
이스를 연결하여 모든 업무를 처리하고 있다고 하자. 이 시스템의 아
키텍처는 좋은 것일까, 나쁜 것일까? 화면과 업무 로직이 섞여 있기
때문에 나쁜 아키텍처라는 일반론을 들이 댈 수도 있지만 이론일 뿐
이다. 아키텍처가 좋은 지 나쁜 지는 오로지 아키텍처가 주어진 상황
에 얼마나 적합한지로 판단해야 한다.
만약 대량 데이터를 읽어서 실시간으로 보고서를 제공하는 MIS
업무를 완전 초보 개발 조직이 3개월 동안 개발해야 하는데 고객마저
성질이 급해서 데이터가 아무리 많더라도 요청 후 10초 안에 보고서
를 보여주길 바라는 상황이라면, JSF로 화면을 구현하여 Struts 프
레임워크에 붙여서 EJB로 구현된 비즈니스 컴포넌트를 통해 OR 맵
핑으로 데이터를 가져오는 아키텍처는 무용지물이다. 이런 상황이라
면 4GL 도구나 보고서 도구로 구현한 화면에서 바로 데이터를 가져
다가 보고서를 만들어 줘야 한다. 아무리 화려한 이론과 최신 기술로
무장한 아키텍처라고 해도 주어진 상황에 맞지 않는다면 말짱 도루묵
이다. 아키텍처는 실재로 프로젝트에 적용되어서 시스템으로 체화될
이해일 jongidal@gmail.com|저절로되는학문( )을연구하다가창조자의기분을느끼고싶
어만드는학문(工 )을업으로삼았다.현재Ubiqo대표로모은행국외전산시스템구축프로젝트에서
아키텍트로일하고있다.
훌륭한 아키텍처는 주어진 상황에 가장 적합한 아키텍처다.
상황에 가장 적합한 아키텍처는 책에서 구할 수 있는 것도
학교에서 배울 수 있는 것도 아니다. 현장에서 부딪히면서
만들어 낼 수 있는 것이다. 이번 기사를 통해 현장에서 얻은
경험을 바탕으로아키텍처링전반을살펴보고자한다.
화려하고 새로운 아키텍처의
유혹에서 벗어나라
아키텍트 편
화려하고 새로운 아키텍처의 유혹에서 벗어나라
마 이 크 로 소 프 트 웨 어 145
때만 유용성을 인정받을 수 있다. 주어진 상황에 딱 맞는 최적의 아키
텍처를 만들어 낸다는 실용주의 자세야 말로 아키텍트가 지켜야 할
금과옥조(金科 )인 것이다.
한 가지 주의해야 할 점이 있다면, 아키텍처는 제약일 수밖에 없고
인간은 제약받는 것을 싫어하기 때문에 아키텍트는 다양한 이해관계
자들로부터 아키텍처를 어기려는 수많은 도전을 받을 수밖에 없다는
것이다. 반복하지 말라는 DRY(Don’t Repeat Yourself) 원칙, 모듈
화의 원칙, 인터페이스 중심의 원칙같이 아키텍처가 주어진 상황과
관계없이 반드시 견지해야 할 원칙들은 존재하고 이 원칙 안에서 도
전을 받아들여야 한다.
이제부터 아키텍트가 아키텍처를 만들어가는 아키텍처링 과정을
책에 나온 이론이 아닌 현장에서 얻은 경험을 중심으로 이야기하려고
한다. 경험이 쌓이고 쌓이면 패턴이 된다고 한다. 이 경험이 독자 여
러분들의 경험과 더해져 훌륭한 아키텍처링 패턴을 만들어 낼 것을
기대해 본다.
피아식별( )
장수가 전장에서 갖춰야 할 제일 기본은 아군을 인식하고 적군과 구
별해내는 것이다. 아키텍처링도 마찬가지다. 전 우주에서 우리가 다
뤄야 할‘우리 시스템’을 식별해 내고, 이렇게 식별한 우리 시스템과
상호 작용하는 다른 시스템들을 찾아내는 작업은 모든 아키텍처링의
시작이다.
그렇다면 어떤 기준으로 우리 시스템을 식별할 수 있을까? 기술 변
수도 아주 중요하지만, 프로젝트를 둘러싼 정치 변수들이 더 중요한
경우가 많다. 우리 시스템을 식별해내는 순간 프로젝트 범위가 결정
된다. 프로젝트 범위엔 많은 이해관계자들이 얽혀 있다. 이 이해관계
자들은 자신의 이해관계에 따라 정치활동을 펼친다. 정치라는 말에
알레르기 반응을 보일지도 모르지만, 아키텍트는 시스템의 기술 측면
을 대변하는 이해관계자로서 시스템이 바람직한 기술 구조를 가지도
록 다른 이해관계자들을 설득하고 조율하는 정치활동을 펼쳐야 한다.
때로는 이해관계자들의 이해가 상충하여 기술 측면에서 바람직하지
않은 방향으로 시스템의 범위가 결정될 수도 있지만, 이런 결정조차
아키텍트를 포함한 모든 이해관계자들이 찾아낸 합의점이라는 것을
인정하는 지혜가 필요하다.
보통 우리 시스템의 범위는 시스템을 구축하는 프로젝트의 책임
범위에 따라 결정된다. 은행 시스템을 구축한다고 해보자. 프로젝트
를 진행하면서 직접 구축해야 하는 부분은 분명히 우리 시스템의 한
부분이다. 또, 은행 공동망 시스템이나 신용카드 시스템은 우리 시
스템과 상호 작용해야 하는 다른 시스템인 것도 확실하다. 그런데
구분이 좀 모호한 것도 있다. 예를 들어, 보통 상용 제품을 구매해서
인터페이스만 맞춰서 쓰는 ATM과 새롭게 시스템을 구축하거나 기
존 시스템을 재활용하는 인터넷뱅킹은 우리 시스템일 수도 있고 다
른 시스템일 수도 있다. 어디에 속할 지는 프로젝트가 책임져야 하
는 범위에 따라 달라진다. 우리 시스템의 경계는 프로젝트가 책임
범위까지이고, 우리 시스템과 상호작용하는 다른 시스템은 관심 범
위까지라고 생각하면 된다(<그림 1>). 좀 더 단순하게 이야기하면,
ATM 구매부터 책임진다면 우리 시스템 범위이고 프로젝트와 무관
하게 구매가 이루어진다면 상호작용해야 하는 다른 시스템으로 생
각하면 된다.
아키텍트는 우리 시스템은 내부까지 세세하게 다뤄야 하고 관심 범
위에 있는 다른 시스템은 상호작용 방식까지만 다루면 된다. 우리 시
스템의 범위는 제안요청서(RFP), 비전기술서, 프로젝트 계획서에
잘 드러나기 때문에 아키텍처링 작업 전에 반드시 확보하여 숙지할
필요가 있다.
고객만족(顧客 )
아키텍트의 업종은 무엇일까? 대한민국에서 아키텍트는 서비스업으
로 분류된다. 그렇다. 아키텍트는 시스템을 둘러싼 다양한 이해관계
자들인 고객을 만족시켜야 하는 서비스 업자다. 그렇다면 어떻게 고
객을 만족시킬 것인가? 간단하다. 모든 서비스업이 그렇듯이 고객의
요구를 만족시키면 된다. 아키텍트는 시스템이 필요한 기능과 적절한
품질을 제공해야 한다는 고객의 요구를 만족시킬 수 있게 아키텍처를
만들어야 한다.
아키텍처는 시스템에 필요한 쓸모, 아름다움, 짜임새를 모두 다뤄
야 하지만, 보통 쓸모가 짜임새와 아름다움을 주도한다. 아키텍처가
고객이 원하는 쓸모를 충족시키지 못한다면 아무리 짜임새 있고 아름
<그림 1> 아키텍처링 시작하기
우주
관심 범위
우리 시스템
다른 시스템
다른
시스템
다른
시스템
다른 시스템
다른 시스템
다른 시스템
책임 범위
상호작용
상호작용
상호작용
상호
작용상호
작용
다른 시스템
다른 시스템
특집 부|아키텍트 편
146 2 0 0 5 . 1 2
다워도 아무 소용없다. 아키텍처는 고객이 원하는 쓸모를 충족시킬
수 있도록 아름다움과 짜임새를 결정하는 것이다(<그림 2>). 고객이
원하는 쓸모가 바로 고객의 요구로 유스케이스로 대표되는 기능 요구
와 품질로 대표되는 비기능 요구로 나눌 수 있다.
조금만 생각해보면 기능과 품질이 서로 밀접한 연관관계를 가지는
것은 아니라는 것을 알 수 있다. 만약 기능과 품질이 밀접한 연관이
있다면 시스템이 제공하는 기능에 따라 성능, 가용성, 사용성, 보안
수준 같은 품질이 결정되겠지만 그렇지 않다는 것을 우리는 잘 알고
있다. 그렇다고 해서 시스템이 무슨 기능을 제공하든지 원하는 수준
의 품질을 제공할 수 있다는 뜻은 아니다. 아주 많은 데이터를 근거로
아주 복잡한 계산을 하는 기능을 제공하면서 아주 빠른 성능을 내는
것은 거의 불가능하다. 아키텍트는 모든 유스케이스가 적절한 수준의
품질을 만족시킬 수 있도록 해주어야 한다.
흔히 아키텍처를 설명하면서 품질과 많이 연관시킨다. 맞다. 하지
만 아키텍처가 품질만을 다루는 것은 아니다. 다만 유스케이스로 대
표되는 기능 요구는 아키텍처를 기반으로 하는 개발을 통해 만족시킬
수 있지만 품질로 대표되는 비기능 요구는 주로 아키텍처가 만족시킬
수밖에 없기 때문에 품질이 강조되는 것뿐이다.
기능 요구는 명백하지만 비기능 요구는 모호할 수 있다. 예를 들어,
시스템은 높은 성능을 내야 한다는 말은 매우 모호하다. 어떤 상황에
서 얼마나 성능을 내야 한단 말인가? 또, 시스템은 유연하게 수정할
수 있어야 한다는 말도 의미가 없다. 어떤 종류의 변화에 대해서는 수
정할 수 있지만 어떤 종류의 변화에 대해서는 수정할 수 없을지도 모
른다. 또 비기능 요구사항들은 서로 상충할 수도 있기 때문에 모든 품
질 요구를 100% 만족시킬 수는 없다. 전체 품질은 각 품질의 목표를
적절한 수준에서 조율한 수준에서 결정된다. 품질 요구를 정확하게
판단하기 어렵기 때문에 <표 1>과 같은 품질 요구 질의서를 통해 품
질 요구를 정확하게 파악하는 것이 필요하다.
마지막으로 아키텍처만 잘 만든다고 모든 요구가 만족되는 것은 아
1
<표 1> 품질 요구 질의서 예
구분 ID 요구 사항 순위 상충 아키텍처 결정
장애 영향 최소화 AR 005 특정 지점의 장애가 다른 지점에 영향을 미치지 않아야 한다. 1 AR 015 웹서버, WAS, DB를 지점 별로 구성
AR 006 외부 시스템의 장애가 발생하더라도 5 대외 시스템에 장애가 발생하면 데이터를 보관해 놓았다가
업무 진행에 지장이 최소화되어야 한다. 장애 복구 후 일괄 처리
24x365 서비스 AR 008 ATM/인터넷 뱅킹은 중단없이 24x365 서비스를 제공한다. 4 D일자 마감 후 업무 원장 Snapshot을 기반으로 D일자 지점 MIS
업무를 수행하며, 마감 후 거래는 D+1일자로 업무 원장에 반영
AR 009 서비스 중단 없이 하드웨어를 교체할 수 있어야 한다. 3 하드웨어 이중화
AR 010 O/S 커널 파라미터 변경, WAS/DBMS 재 기동을 제외하고, 4 AR 011 하드웨어 이중화
서비스의 중단 없이 애플리케이션이나 대체 가능성이 높은 컴포넌트 단위로 배포
컴포넌트를 교체할 수 있어야 한다. Hot Deploy 제공
빠른 처리 속도 AR 011 온라인 거래와 온라인 배치는 1 AR 010 같은 기계 내부에서 EJB 호출을 최소화할 수 있는 아키텍처 제시
다음과 같은 시간 내에 처리 완료되어야 한다.
- 내부 거래: 최대 7초, 평균 3~4초
- 원격 거래: 최대 10초, 평균 5~6초
AR 012 온라인 보고서 조회는 최대 60초 이내 처리 완료되어야 한다. 3 SQL 최적화 (구현으로 해결)
AR 013 점포별 일일 마감을 포함한 일 배치 작업은 2 마감 배치 작업에 시스템 자원 최대 배정
점포별 30분 이내에 처리 완료되어야 한다.
AR 014 영업시간 중 온라인 거래(ATM, IB 포함)와 2 트랜잭션 처리 단위 최적화
온라인 배치는 1초에 최대 25건의 거래를 처리해야 한다.
쉬운 유지보수 AR 015 변경 사항을 시스템에 반영하는 과정을 자동화해야 한다. 1 AR 005 자동 빌드, 배포 스크립트 제공
지점별로 시스템 설정에 걸리는 시간은 0.5M/H를 넘어선 안된다.
<그림 2> 아키텍트가 다뤄야 할 것들
기능/비기능 요구사항 제공
의사소통
쓸모(고객)
짜임새(작업자)
설계 실현 전체 구조와 구성요소 결정
아름다움(아키텍트)
의사소통
의사소통
화려하고 새로운 아키텍처의 유혹에서 벗어나라
마 이 크 로 소 프 트 웨 어 147
니라는 것을 기억해야 한다. 프로젝트의 모든 공정이 기능과 품질에
영향을 미친다. 품질 요구 가운데 일부는 아키텍처 자체가 만족시키
기도 하지만 대부분 기능과 품질은 설계, 구현, 배치와 같은 세부 활
동의 결과물이기 때문에 끊임없는 활동결과 검토로 아키텍처를 유지
해 가는 것이 중요하다.
분할정복( )
엔터프라이즈 시스템은 복잡하다. 수십 명에서 수백 명에 이르는 각
분야의 전문가들이 일 년 넘게 혼신을 쏟아야 완성될 정도로 복잡하
다. 아키텍트는 수많은 변수를 요모조모 따져서 이렇게 복잡한 엔터
프라이즈 시스템 구축에 필요한 최적화된 아키텍처를 만들어내야 한
다. 게다가 인간이 한 번에 다룰 수 있는 정보량은 지극히 한정되어
있기 때문에 아무리 뛰어난 아키텍트라도 엔터프라이즈 시스템을 통
째로 다루는 것은 거의 불가능하다. 다행히도 인류는 복잡한 문제는
이해하고 다룰 수 있는 크기로 나눈 다음 하나씩 정복하면 해결할 수
있다는 것을 오랜 경험으로 체득하고 있다.
아키텍처링도 마찬가지다. 우선 우리가 이해할 수 있는 수준에서
시작해야 한다. 앞서 이야기했듯이 무한히 복잡한 전 우주에서 우리
시스템을 분할해내야 한다. 아무리 복잡한 시스템이라도 아키텍처링
의 시작은 이렇게 단순하다. 일단 우리 시스템과 전 우주를 분할한 다
음 우리 시스템을 다시 이해할 수 있는 수준의 부분들로 분할해가면
서 부분들 사이의 인터페이스 방식을 정의하면 아키텍처는 완성된다.
결국, 아키텍처링이란 시스템을 몇 개 상자와 선으로 표현하는 것에
서 시작해서 이 상자 내부와 선을 구체화시켜 가는 과정이다. 카네
기-멜론 소프트웨어 엔지니어링 인스트튜트에서 주창한 ADD
(Attribute-Driven Design, 속성 주도 설계) 방법이 되었든, 직접 고
안한 방법이 되었든 모든 아키텍처 수립 방법론은 결국 우리가‘그
냥’알고 있는 분할정복 전략을 체계화한 것이다(<그림 3>).
그렇다면 과연 어떤 기준으로 시스템을 분할해 갈 것인가? 다행히
도 이 기준은 선배 아키텍트들이 수십 년 동안 경험을 통해 마련해 놨
다. 우리는 이 경험을 고스란히 익혀서 새롭게 적용하면 된다. 이런
경험들을 고상한 말로 아키텍처 패턴이라고 한다.
우리 시스템
아키텍처 수립 방법론
우리 시스템
인터페이스인터페이스 인터페이스
모듈 모듈
모듈
모듈 모듈
모듈
<그림 3> 분할정복 전략
[ ADD방법의공정 ]
ADD(Attribute-Driven Design, 속성 주도 설계) 방법의 공정은 <그림 1>과 같다. 아
키텍처 드라이브(Architecture Drive, 요구사항이라고 생각하면 된다)를 달성할 수 있
도록 아키텍처 패턴에 따라 시스템을 좀 더 작은 단위로 분할해 가면서 아키텍처를 설
계하는 것이다(<그림 2>).
자세한 내용은 www.sei.cmu.edu/architecture/add_method.html에서 살펴보
기 바란다. 현장에서 체득한 지식을 이론으로 무장해야 완벽에 가까워지는 법이다.
분할할 모듈을
선택한다
(전체
시스템에서
시작한다).
모든 모듈을 분할할 때까지
반복한다.
아키텍처 패턴을
선택해서
하위 모듈과
상호작용 방식을
결정한다.
유스케이스와
품질 속성을
정제하고 검증하여
하위 모듈의 제약
사항으로 만든다.
하위 모듈을
실체화하고
다양한 뷰를 통해
모듈에 기능을
할당한다.
하위 모듈의
인터페이스를
정의한다.
선택한 모듈이
달성해야 할 아키
텍처 드라이브를
나열하고 우선순
위를 매긴다.
<그림 1> ADD 방법 공정
시스템 M1
M3
M3-1 M3-2
M4 M4-1
M4-3 M4-4
M4-2 M4-2-1
M4-2-2
M2
ADD
ADD
ADD
ADD
<그림 2> ADD 방법으로 시스템을 분할 정복하는 과정
특집 부|아키텍트 편
148 2 0 0 5 . 1 2
온고지신( 故 )
게을러지고 싶은 아키텍트는 영악해지면 된다. 전문가들의 경험을 활
용하면 된다. 처음부터 다시 시작하지 마라. 하늘 아래 전혀 새로운 것
은 진짜 드물다. 전대미문의 시스템을 구축하는 일이 얼마나 있겠는
가? 오히려 그동안 운영되어 오던 엔터프라이즈 시스템을 개비(改 )
하는 일이 많기 때문에 비록 구닥다리가 되어 버린 것 같은 기존 시스
템에서 수십 년 동안 쌓여 온 전문가들의 경험을 뽑아내야 한다. 컴포
넌트라고 이름을 붙이든 모듈이라고 이름을 붙이든 응집도를 높이고
결합도를 낮춰야 한다는 소프트웨어 공학의 기본 원리가 변하지 않듯
이 코볼로 만들었든 자바로 만들었든 시스템을 만드는 철학은 크게 다
르지 않다. 어떤 시스템이 수십 년 동안 특정한 모습으로 유지되어 왔
다면 다 나름대로 근거가 있고 이유가 있는 법이다. 아키텍트는 이 근
거와 이유를 검토하여 새롭게 구축하는 우리 시스템에 적용해야 한다.
그렇다면 대부분 엔터프라이즈 시스템에 적용할 수 있는 아키텍처
패턴은 무엇일까? 이 질문에 답하려면 아키텍처를 결정하는 가장 중
요한 아키텍처 드라이브가 무엇인지 생각해봐야 한다. 중요한 아키텍
처 드라이브인 기능과 품질 가운데 더 중요한 것은 기능이다. 아키텍
처는 우선 시스템에 필요한 모든 기능을 지원하는 기반을 제공해야
한다. 시스템에 필요한 기능을 모두 제공하지 못한다면 아무리 뛰어
난 품질을 제공한다고 한들 무슨 소용이 있겠는가?(그렇다고 품질을
무시하고 무조건 기능만 만족시키라는 의미는 아니다. 품질과 기능이
서로 밀접한 연관 관계를 가지는 것은 아니지만, 이 둘이 직교하는
(orthogonal) 관계는 아니다. 필요한 모든 기능을 만족할 만한 품질
로 제공해야 한다).
최초로 시스템을 분할할 때 기능성(functionality)이라는 아키텍처
드라이브를 기준으로 삼아야 한다. 지난 수십 년 동안 만들어진 대부분
엔터프라이즈 시스템은 제공하는 주요 기능에 따라 채널계, 계정계, 정
보계라는 세 가지 구성요소로 나눠지는 아키텍처 패턴을 따르고 있다.
은행 시스템을 예로 들어보자. 계정계는 주로 실시간 업무를 처리
하는 부분으로 업무 원장이라는 데이터를 중심으로 움직인다. 채널계
는 계정계에 접근하는 다양한 통로로 ATM이나 인터넷뱅킹 같은 별
도 시스템일 수도 있고 사용자가 조작하는 단말기일 수도 있다. 정보
계는 계정계에서 만들어진 데이터를 가공하여 보고서와 같은 정보를
생산한다. 시스템을 채널계, 계정계, 정보계로 분할하는 아키텍처 패
턴은 코볼로 시스템을 만들던 시대나 자바 EE(Java Enterprise
Edition)로 시스템을 만드는 시대나 항상 유효하다. 또, 각 계 사이의
상호작용 방식은 기술과 시대의 변화에 따라 바뀔 수 있지만, 상호작
용하는 관계는 크게 변하지 않는다. <그림 4>를 굳이 레이어, 블랙보
드, 파이프와 필터 같은 잘 알려진 아키텍처 패턴에 끼워 맞출 수도
있지만 이 단계에서 큰 의미는 없는 작업이다.
채널계, 계정계, 정보계로 시스템을 나누는 것은 훌륭한 출발점이
될지는 모르지만 아직 실무자들이 받아들이기엔 너무 추상화 수준이
높다. 다시 적절한 아키텍처 패턴을 적용하여 각 계를 좀 더 작은 단
위로 분할해야 한다. 예를 들어 계정계를 다시 온라인 시스템, 일괄처
리 시스템, 대외 인터페이스 시스템으로 나누는 아키텍처 패턴을 적
용할 수 있다. 이 아키텍처 패턴 역시 기능성이라는 아키텍처 드라이
브를 가장 중요하게 고려한 것이다.
아키텍처가 이 정도 수준에 이르면 한 가지 모습으로 아키텍처를
파악하기 어려워지기 때문에 적절한 아키텍처 프레임워크
(Architectural Framework)를 참조해서 프로젝트 특성에 맞는 다
양한 관점(View)으로 시스템을 바라보면서 아키텍처를 만들어 가야
한다. <그림 5>는 그 동안 경험으로 얻은 아키텍처에 필요한 관점들
을 모아 놓은 것이다.
전체 아키텍처 관점은 우리 시스템 전체 윤곽을 <그림 4>의 수준에
1
[ 브라이언푸트의패턴이야기 ]
브라이언 푸트(Brian Foote)만큼 훌륭하게 패턴을 설명한 사람은 없는 것 같다. 게
으르고 영악한 건축가가 있었다. 어느 날 이 건축가가 대학 건물과 그 주변 통행로를
설계하게 되었는데 대학 건물만 설계하고 통행로는 방치한 채 게으름을 피웠다. 결국
통행로 없이 대학 건물만 지어졌지만 이 건축가는 여유만만이었다. 사람들은 정해진
통행로가 없었기 때문에 자기 좋을 대로 건물 주위를 돌아 다녔다. 겨울이 되었고 큰
눈이 내렸다. 이 건축가는 드디어 일을 시작했다. 사람들이 눈 위로 돌아다닌 발자국
들을 사진으로 찍었다가 봄이 되자 찍어 두었던 사진들을 보고 통행로를 설계했다.
이렇게 완성된 통행로는 다니기에도 편했고 주변 건물과도 잘 어울렸다. 패턴이란 바
로 이런 것이다. 패턴은 어떤 분야에서 계속 반복해서 나타나는 문제들을 해결해 온
전문가들의 경험을 모아서 정리한 것이다. 누가 뭐래도 대학 건물 주변의 동선( )
을 제일 잘 알고 있는 전문가는 바로 매일 건물 주위를 돌아다니던 사람인 것이다. 게
으르고 영악한 건축가는 누가 전문가인지 잘 알고 있었고 전문가들의 경험을 활용한
것이다.
시스템
채널계 정보계계정계
온라인
시스템
대외 인터페
이스 시스템
일괄 처리
시스템
<그림 4> 대부분 엔터프라이즈 시스템에 적용할 수 있는 아키텍처 패턴
화려하고 새로운 아키텍처의 유혹에서 벗어나라
마 이 크 로 소 프 트 웨 어 149
서 설명한다. 다음으로 각 계의 구성요소를 대상으로 시스템 아키텍
처 관점과 소프트웨어 아키텍처 관점을 기술한다.
시스템 아키텍처 관점은 하드웨어와 네트워크 구성요소 사양과 구
성 방식(topology)을 주로 기술한다. 하드웨어나 네트워크 사양은 프
로젝트가 시작될 시점에 정해진 예산에 따라 어느 정도 결정되어 있
기 때문에 아키텍트가 프로젝트 기획 단계부터 참여하지 않는다면 시
스템 아키텍처를 설계할 때 많은 제약을 받을 수밖에 없다. 엔터프라
이즈 시스템 구축 프로젝트 생리상 하드웨어나 네트워크 사양이 딸려
서 문제가 되는 경우는 거의 없다. 문제는 하드웨어와 미들웨어 사이
의 궁합이나 개발한 소프트웨어에서 일어나는 경우가 대부분이다. 이
런 제약이 아키텍처링 전체에 위협을 가할 정도는 아니다.
하지만 시스템이 제공해야 하는 품질 가운데 많은 부분을 소프트웨
어로만 감당하기 힘들기 때문에 아키텍트는 하드웨어나 네트워크 관
련 지식도 많이 갖춰야 한다(박스 기사 참조). 가용성을 높일 수 있는
페일오버(Fail-over) 같은 기능은 하드웨어 수준에서 제공해주지 않
으면 거의 실현하기 어렵다. 또, 일일 마감 전에 대량 데이터를 복제
해야 한다면 저장장치 업체가 제공하는 제품을 쓰면 성능이나 데이터
일관성을 보장받기 쉽다. 아키텍트는 자신의 지식체계에 반드시 하드
웨어, 네트워크, 제품이라는 분류도 추가해야 한다.
소프트웨어 아키텍처 관점은 직접 개발할 소프트웨어나 기존 소프
트웨어의 다양한 모습을 기술한다. 이때 적용할 기술 구조가 어느 정
도 결정되어 있다면 각 기술 구조마다 검증된 아키텍처 패턴이 이미
존재하고 있기 때문에 아키텍트는 좀 더 게을러질 수 있다. 물론
MDA 같이 기술 중립 아키텍처를 설계하는 방법도 있지만, 결국 시
스템을 완성하려면 특정 기술 구조를 적용해야 하고 아키텍처가 제공
해야 하는 특정 품질 요구를 만족시키려면 특정 기술에 종속된 기능
을 반드시 써야 하는 경우가 많다.
온라인 시스템의 소프트웨어 아키텍처 관점을 좀 더 살펴보자. 실
시간 거래를 담당하는 온라인 시스템의 아키텍처는 레이어드
(Layered) 아키텍처 패턴을 따르는 것이 좋다. 단, 실무에 적용해보
면 책에서 본 것 같은 단순한 평면 레이어 구조로는 엔터프라이즈 시
스템을 설명하는 것은 어렵다. 적어도 업무 관점으로 바라본 레이어
와 구현 관점에서 바라본 레이어를 고려해야 한다(<그림 6>).
업무관점에서보통<표2>와레이어를같이나눌수있다(레이어이름
은 정해진 표준이 있는 것이 아니라 흔히 쓰이는 이름을 붙인 것이다).
또, 구현 관점에서 <표 3>과 같이 레이어를 나눌 수 있다. 레이어 이
름은 기존에 여러 대가들이 붙였던 이름들을 종합해서 결정한 것이기
때문에 독자들이 알고 있는 이름과 다룰 수도 있다. 비록 이름은 다르
더라도 레이어가 해야 하는 역할은 변함없다.
각 레이어 내부 역시 적절한 패턴을 적용해서 분할해가면서 정복해
전체 아키텍처 관점
시스템
아키텍처 관점
모듈 관점
구성 관점
…
논리 관점
구현 관점
배치 관점
…
모듈 관점
상호작용 관점
메커니즘 관점
…
소프트웨어
아키텍처 관점
<그림 5> 아키텍처를 기술하는 다양한 관점
[ 시스템아키텍처에관련된정보 ]
소프트웨어 아키텍처에 비해 시스템 아키텍처와 관련된 정보는 흔하지 않지만 다음
사이트에서 찾아 볼 수 있다.
◆ www.gaudisite.nl
◆ www.enterpriseintegrationpatterns.com
◆ www-128.ibm.com/developerworks/patterns
업무 관점
단위 업무
레이어
공통 업무
레이어
애플리케이션
프레임워크
레이어
비즈니스
프레임워크
레이어
업무 레이어
프리젠테이션
레이어
애플리케이션
레이어
비즈니스
레이어
커넥터 레이어
개
발
관
점
리소스 레이어
<그림 6> 레이어드 아키텍처 예제
<표 2> 업무 관점에서의 레이어
구성 내용
애플리케이션 프레임워크 레이어 기술 기반 기능을 제공한다.
애플리케이션 프레임워크 레이어 업무 기반 기능을 제공한다.
업무 파티션 레이어 실제 업무 기능을 제공한다. 공통 업무 기능을 제공하는
코어 업무 파티션과 나머지 일반 업무 기능을 제공하는 단
위 업무 파티션으로 나눌 수 있다.
특집 부|아키텍트 편
150 2 0 0 5 . 1 2
야 한다. 이 수준부터 적용되는 아키텍처 패턴은 좀 더 특정 분야에
특화된다. 업무 관점은 샌프란시스코 비즈니스 패턴(SanFrancisco
Business Patterns) 같은 범용 비즈니스 패턴이나 업무 전문가들이
경험으로 체득한 패턴들을 적용해서 작성한다. 예를 들어, 은행애서
회계처리가 일어나는 연동 거래 업무 패턴은 <그림 7>과 같다.
또, 기술 관점은 Pattern of Enterprise Architecture, EJB Design
Pattern, Core Java EE Pattern, Enterprise Solution Patterns
Using Microsoft .NET과 같은 패턴들을 응용하여 작성한다. <그림
8>은 비즈니스 레이어 구현 패턴 예제이다.
좀 더 깊숙이 들어가면 트랜잭션 처리, 동시성 제어, 가변성 제어,
세션 제어 같은 상세한 사항을 해결할 수 있는 메커니즘을 제시해야
한다. 이 메커니즘을 제시하려면 아키텍트는 프로젝트에 적용한 표준
기술(예를 들어 자바 EE, 닷넷, CORBA)을 잘 알아야 할 뿐 아니라
웹 서버, 웹 애플리케이션 서버, 데이터베이스, 운영체제 같은 플랫폼
의 특성도 상당히 깊이 이해하고 있어야 한다.
지금까지 시스템을 점차 작은 부분으로 나눠가면서 적절한 수준의
패턴을 적용해서 아키텍처를 만드는 방법을 살펴보았다. 이런 환원주
의( )는 주의해야 할 점이 있다. 전체는 부분의 합보다 크다
는 것을 잊지 말아야 한다는 것이다. 부분 부분은 완벽할 수 있어도
한 데 모아놓으면 서로 상충하는 부분이 생길 수 있고 직교한다고 생
각했던 부분들이 서로 영향을 미칠 수도 있다. 따라서 부분을 바라보
고 일을 할 때도 항상 전체를 생각할
수 있어야 한다.
또 하나 강조하고 싶은 것은 기술
순혈주의( )에 빠지지 말라
는 것이다. 방대한 엔터프라이즈 시
스템을 단일한 기술로 균질하게
(Homogeneous) 만들 수 없을지도
모른다. 다양한 기술과 다양한 품질
요구를 만족시키려면 가장 적절한
기술 구조를 적용해야 한다. 물론 유
지보수도 쉽고 인력수급도 쉽고 개
발 난이도도 낮아지기 때문에 단일
한 기술로 균질하게 시스템을 만드
는 것이 제일 좋다.‘적절한’이란 말
은 유지보수, 인력수급, 개발 난이
도, 기능, 성능 등 이 모든 것을 고려
해서 결정을 내리라는 뜻이다. 온라
인 시스템은 자바 EE로, 터미널은
VB.Net으로, 커넥터는 유닉스 C로
1
<표 3> 구현 관점에서의 레이어
구성 내용
프리젠테이션 레이어 뷰(View). 액터-시스템 인터페이스를 제공한다.
채널계 쪽으로 빠질 수도 있다.
애플리케이션 레이어 프리젠테이션 레이어와 비즈니스 레이어를 연결한다.
외부 시스템으로부터 요청을 받아들인다.
비즈니스 레이어 컨트롤(Control). 제공해야 하는 서비스를 실행한다.
커넥터 레이어 다른 레이어를 리소스 레이어나 외부 시스템과 연결한다.
리소스 레이어 모델(Model). 시스템이 다루는 정보를 관리한다.
� 최종 거래 요청
� 분개 화면
생성
� 분개 정보
전달
�
거래 요청
� 거래 요청
� 회계 처리
요청
� 단위 업무
처리
� 회계 처리
� 연동 거래
실행
� 트랜잭션
번호 반환
� 전표 번호
반환
� 승인
요청
� 거래 결과 반환
� 분개 화면 생성에
필요한 정보 요청
� 분개 화면 생성
정보 반환
단위 업무
화면
분개 화면
승인 회계단위 업무 단위 업무
<그림 7> 업무 패턴 예제
비즈니스
컴포넌트
<<Pattern>>
서비스 퍼서드
(Service Fasade)
<<Pattern>>
리소스 엑세스
커넥터
리소스
<<Pattern>>
서비스 델리게이트
<<Pattern>>
애플리케이션
서비스
<<Pattern>>
데이터 전달 객체
외부 시스템
다른
비즈니스
컴포넌트
<<Pattern>>
비즈니스
인터페이스
<<레이어>>
비즈니스
<<레이어>>
커넥터
<<레이어>>
리소스
<그림 8> 비즈니스 레이어 구현 패턴 예
화려하고 새로운 아키텍처의 유혹에서 벗어나라
마 이 크 로 소 프 트 웨 어 151
구현할 수 있다. 심지어 온라인 시스템 안에서도 화면 조회 같은 특정
업무는 보고서 도구로 구현할 수도 있다. 세상은 어차피 비균질
(Heterogeneous)하다. 교조주의에 빠지지 않도록 주의하라.
이런 과정을 거쳐 완성된 아키텍처를 고객이 가장 쉽게 이해하고
적용할 수 있는 방법을 찾아야 한다. 아키텍처 기술서 전달과 아키텍
처 교육은 필수이고 대부분 작업 지침서와 예제까지 제공한다. 아키
텍처는 프로젝트 참여자들의 자유를 규제하고 규제라는 것은 작업 속
도만 놓고 보면 분명 걸림돌이다. 따라서 고객의 생산성을 높일 수 있
는 도구들을 제공해 줄 필요가 있다. <그림 8>과 같은 구현 패턴이 결
정되면 구현 패턴에 맞춰 골격 코드를 만들어 낼 수 있는 코드 생성기
를 제공하는 것이 좋다. 코드 생성기는 시스템 자체의 품질뿐만 아니
라 아키텍처 자체의 품질도 높을 수 있는 도구이다. 예를 들어, 데이
터 중심 시스템이라면 <그림 9>와 같이 데이터베이스로부터 자동으
로 데이터 접근 객체(DAO, Data Access Object)와 데이터 전달 객
체(Data Transfer Object)를 만들어 주는 코드 생성기를 제공하여
생산성을 크게 향상시킬 수 있다.
심신단련( )
마지막으로 인간으로서, 직업인으로서 아키텍트를 이야기하고 싶다.
아키텍트는 완벽을 추구해야 한다. 아키텍트가 기침하면 프로젝트 전
체가 독감에 걸릴 수도 있기 때문이다. 혹시라도 작은 실수를 했다면
발견한 즉시 실수를 인정하고 바로 잡아야 한다. 아무리 작은 실수라
도 묻어둔다면 전체 프로젝트 참여자가 작업을 진행하면 할수록 문제
가 쌓이고 쌓여 나중엔 바로 잡을 수 없는 지경에 이를 수도 있다.
아키텍트는 항상 겸허하고 유연해야 한다. 아무리 오래된 기존 시
스템에서도 장점을 찾아서 받아들일 수 있어야 하고, 업무 전문가들
이 수년간 일해온 방식에서 패턴들을 찾아낼 수 있어야 한다. 아키텍
트는 다양한 가능성 가운데 최적의 답을 찾아낼 수 있도록 어떠한 정
치 요소에도 흔들리지 않고 결단을 내릴 수 있어야 한다. 아키텍트는
프로젝트의 기술 분야를 책임지는 CTO라 할 수 있다. 기술 분야에서
는 최고 권위를 가지고 결단내려야 한다.
아키텍트는 IT 기술뿐만 아니라 직업인의 기본기를 충분히 갖춰야
한다. 조직이 개인의 자질을 체계적으로 키워주지 않는 환경에서 일
하는 안타까운 현실에서 우리는 직업인으로서 기본기를 스스로 갖출
수밖에 없다. 아키텍트가 상대해야 하는 고객은 프리젠테이션 기술,
외국어, 커뮤니케이션, 보고서 작성과 같은 직업 기본기가 충실한 사
람들이기 때문이다. 결국 아키텍처링도 시스템 구축도 사람들이 모여
서 하는 일이기 때문에 사람과 사람 사이의 관계를 유지하는 기술이
전문기술보다 훨씬 더 중요할 수 있다는 것을 잊지 말자.
일천 아키텍처 양병설을 주장하며
시스템이 새로운 사업 영역을 만들어 내는 비즈니스 인에이블러
(business enabler)를 넘어 사업을 이끌어 가는 비즈니스 드라이버
(business driver)가 되어버린 지 오래고 아키텍처는 시스템의 성공
을 좌우하는 가장 중요한 요소 가운데 하나다. 이런 현실에서 뛰어난
아키텍트를 양성하는 것은 국가의 대사가 아닐 수 없기에 감히 일천
( ) 아키텍처 양병( )을 주장하고 싶다. 훌륭한 아키텍트가 많
은 나라를 꿈꿔본다.
정리 | 김세미 | semsem@imaso.co.kr
m
aso
설정 파일(.xml) 코드 템플릿(.vm) 데이터베이스
코드 생성기
DAO 코드 DTO 코드
<그림 9> 아키텍처의 품질을 높이는 코드 생성기 예
아 키 텍 트 지 침 15
1. 전 우주에서 우리 시스템을 식별해내고 우리 시스템과 상호작용하는 다른 시스
템을 찾아내는 것에서 아키텍처링을 시작하라.
2. 때로는 기술보다 정치가 훨씬 더 중요하다는 것을 명심하라.
3. 아키텍트는 서비스 업자다. 고객의 요구를 정확히 판단하여 고객을 만족시켜라.
4. 복잡하다면 다룰 수 있는 수준으로 나눠라. 아키텍처링은 상자 몇 개, 선 몇 줄
을 구체화해 가는 과정이다.
5. 아키텍처는 모든 유스케이스가 적절한 수준의 품질을 만족시키며 실현될 수 있
게 만들어져야 한다.
6. 가장 중요한 아키텍처 드라이브는 기능성이다.
7. 현장에서 체득한 지식을 이론으로 무장해야 완벽해진다.
8. 원리는 변하지 않는다. 방식이 변할 뿐이다. 옛 것을 익혀 새롭게 만들어라. 기
존 시스템에 녹아있는 선배들의 귀중한 경험을 새로운 시스템에 적용하라.
9. 다양한 관점으로 시스템을 바라보라.
10. 지식체계에 하드웨어, 네트워크, 제품을 집어넣어라.
11. 환원주의의 맹점을 주의하라.
12. 기술 순혈주의를 경계하라.
13. 아키텍처 자체의 품질을 높여라.
14. 인성과 업무 기본기를 익혀라.
15. 아키텍처링도 결국 사람들이 모여서 하는 일이라는 것을 잊지 마라.

Contenu connexe

Tendances

HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
SeungHyun Hwang
 
도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기
JangHyuk You
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계
Eb Styles
 

Tendances (20)

Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 
Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6
 
토비의 스프링 - DI
토비의 스프링 - DI토비의 스프링 - DI
토비의 스프링 - DI
 
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조
 
Effective c++chapter3
Effective c++chapter3Effective c++chapter3
Effective c++chapter3
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API
 
도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기
 
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
 
Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계
 
[Swift] Properties
[Swift] Properties[Swift] Properties
[Swift] Properties
 

En vedette

초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기
OnGameServer
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약
kidoki
 

En vedette (20)

마이크로소프트웨어2014년1월 s dx_ian
마이크로소프트웨어2014년1월 s dx_ian마이크로소프트웨어2014년1월 s dx_ian
마이크로소프트웨어2014년1월 s dx_ian
 
오픈소스의 이해
오픈소스의 이해오픈소스의 이해
오픈소스의 이해
 
03. it정보화전략-솔루션 도입
03. it정보화전략-솔루션 도입03. it정보화전략-솔루션 도입
03. it정보화전략-솔루션 도입
 
IT서비스업체에서의 공개SW 1부
IT서비스업체에서의 공개SW 1부IT서비스업체에서의 공개SW 1부
IT서비스업체에서의 공개SW 1부
 
01. kpi기반의 정량적 성능 평가 체계 구축
01. kpi기반의 정량적 성능 평가 체계 구축01. kpi기반의 정량적 성능 평가 체계 구축
01. kpi기반의 정량적 성능 평가 체계 구축
 
IT표준화-아키텍처,프로세스-2015.09.30
IT표준화-아키텍처,프로세스-2015.09.30IT표준화-아키텍처,프로세스-2015.09.30
IT표준화-아키텍처,프로세스-2015.09.30
 
00. it정보화전략-들어가기
00. it정보화전략-들어가기00. it정보화전략-들어가기
00. it정보화전략-들어가기
 
오픈 소스 소개
오픈 소스 소개오픈 소스 소개
오픈 소스 소개
 
확산되는 소프트웨어 정의 (SDx) 개념 및 동향
확산되는 소프트웨어 정의 (SDx) 개념 및 동향확산되는 소프트웨어 정의 (SDx) 개념 및 동향
확산되는 소프트웨어 정의 (SDx) 개념 및 동향
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기
 
NAIM Networks SDN/NFV Training
NAIM Networks SDN/NFV TrainingNAIM Networks SDN/NFV Training
NAIM Networks SDN/NFV Training
 
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
 
Cloud Computing v1.0
Cloud Computing v1.0Cloud Computing v1.0
Cloud Computing v1.0
 
NFV VNF Architecture
NFV VNF ArchitectureNFV VNF Architecture
NFV VNF Architecture
 
암호화
암호화암호화
암호화
 
클라우드 컴퓨팅에 대한 이해, 비즈니스 혁신 전략(2)
클라우드 컴퓨팅에 대한 이해, 비즈니스 혁신 전략(2)클라우드 컴퓨팅에 대한 이해, 비즈니스 혁신 전략(2)
클라우드 컴퓨팅에 대한 이해, 비즈니스 혁신 전략(2)
 
IT전략계획- 03.IT 도입계획
IT전략계획- 03.IT 도입계획IT전략계획- 03.IT 도입계획
IT전략계획- 03.IT 도입계획
 
IT전략계획- 02.정보전략계획(isp)
IT전략계획- 02.정보전략계획(isp)IT전략계획- 02.정보전략계획(isp)
IT전략계획- 02.정보전략계획(isp)
 
04. it정보화전략-어플리케이션 아키텍처
04. it정보화전략-어플리케이션 아키텍처04. it정보화전략-어플리케이션 아키텍처
04. it정보화전략-어플리케이션 아키텍처
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약
 

Similaire à 실용주의 아키텍트

시간 있으면 설계나 합시다
시간 있으면 설계나 합시다시간 있으면 설계나 합시다
시간 있으면 설계나 합시다
codevania
 
아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지
YoungSu Son
 
석유산업계의 시스템공학 적용 필요성, The necessity for systems engineering within the oil and...
석유산업계의 시스템공학 적용 필요성, The necessity for systems engineering within the oil and...석유산업계의 시스템공학 적용 필요성, The necessity for systems engineering within the oil and...
석유산업계의 시스템공학 적용 필요성, The necessity for systems engineering within the oil and...
Jinwon Park
 

Similaire à 실용주의 아키텍트 (20)

SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법
 
소프트웨어 아키텍처
소프트웨어 아키텍처소프트웨어 아키텍처
소프트웨어 아키텍처
 
1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스
 
SoftwareEngeneering3rd
SoftwareEngeneering3rdSoftwareEngeneering3rd
SoftwareEngeneering3rd
 
Approach for Smart Factory
Approach for Smart Factory Approach for Smart Factory
Approach for Smart Factory
 
Lost practice : Requirement Analysis
Lost practice : Requirement AnalysisLost practice : Requirement Analysis
Lost practice : Requirement Analysis
 
소프트웨어설계론
소프트웨어설계론소프트웨어설계론
소프트웨어설계론
 
분석과 설계
분석과 설계분석과 설계
분석과 설계
 
프로젝트에서 Sw아키텍트의 역할 20140717
프로젝트에서 Sw아키텍트의 역할 20140717프로젝트에서 Sw아키텍트의 역할 20140717
프로젝트에서 Sw아키텍트의 역할 20140717
 
시간 있으면 설계나 합시다
시간 있으면 설계나 합시다시간 있으면 설계나 합시다
시간 있으면 설계나 합시다
 
아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지
 
시스템공학 기본(Fundamental of systems engineering) - Day1 se general
시스템공학 기본(Fundamental of systems engineering) - Day1 se general시스템공학 기본(Fundamental of systems engineering) - Day1 se general
시스템공학 기본(Fundamental of systems engineering) - Day1 se general
 
[일본자료] 왜 시스템엔지니어링인가
[일본자료] 왜 시스템엔지니어링인가[일본자료] 왜 시스템엔지니어링인가
[일본자료] 왜 시스템엔지니어링인가
 
석유산업계의 시스템공학 적용 필요성, The necessity for systems engineering within the oil and...
석유산업계의 시스템공학 적용 필요성, The necessity for systems engineering within the oil and...석유산업계의 시스템공학 적용 필요성, The necessity for systems engineering within the oil and...
석유산업계의 시스템공학 적용 필요성, The necessity for systems engineering within the oil and...
 
꿀밋업1탄_왜_마이크로서비스인가
꿀밋업1탄_왜_마이크로서비스인가꿀밋업1탄_왜_마이크로서비스인가
꿀밋업1탄_왜_마이크로서비스인가
 
2011 메타마이닝 회사소개서(최신)
2011 메타마이닝 회사소개서(최신)2011 메타마이닝 회사소개서(최신)
2011 메타마이닝 회사소개서(최신)
 
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
 
Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3
 
Sw 아키텍처와 sw 공학
Sw 아키텍처와 sw 공학Sw 아키텍처와 sw 공학
Sw 아키텍처와 sw 공학
 
2015 Open Cloud Engine Handbook
2015 Open Cloud Engine Handbook2015 Open Cloud Engine Handbook
2015 Open Cloud Engine Handbook
 

실용주의 아키텍트

  • 1. 1특집 부|아키텍트 편 144 2 0 0 5 . 1 2 엔 터프라이즈 시스템을 구축하는 프로젝트에서 아키텍처의 중 요성을 인식하고 아키텍트가 빠질 수 없는 역할로 등장한 것 은 그리 오래 되지 않았다. 그렇다고 해서 예전 시스템에 아키텍처가 없는 것은 아니다. 세상에 존재하는 모든 시스템은 아키텍처를 가질 수밖에 없다. 시스템이 존재하고 동작한다는 것 자체가 아키텍처를 가진다는 증거이다. 아무런 원칙 없이 마구잡이로 만들어진 시스템도 가끔 존재하지만 전산화 역사가 오래된 업종의 시스템은 아키텍처를 수립한다는 의식을 하지 않았을는지 몰라도 뚜렷한 원칙과 방향에 따 라 구축되었다. 이 원칙과 방향이 바로 아키텍처다. 금과옥조(金科 ) 좋은 아키텍처란 무엇일까? 어떤 시스템이 화면에서 바로 데이터베 이스를 연결하여 모든 업무를 처리하고 있다고 하자. 이 시스템의 아 키텍처는 좋은 것일까, 나쁜 것일까? 화면과 업무 로직이 섞여 있기 때문에 나쁜 아키텍처라는 일반론을 들이 댈 수도 있지만 이론일 뿐 이다. 아키텍처가 좋은 지 나쁜 지는 오로지 아키텍처가 주어진 상황 에 얼마나 적합한지로 판단해야 한다. 만약 대량 데이터를 읽어서 실시간으로 보고서를 제공하는 MIS 업무를 완전 초보 개발 조직이 3개월 동안 개발해야 하는데 고객마저 성질이 급해서 데이터가 아무리 많더라도 요청 후 10초 안에 보고서 를 보여주길 바라는 상황이라면, JSF로 화면을 구현하여 Struts 프 레임워크에 붙여서 EJB로 구현된 비즈니스 컴포넌트를 통해 OR 맵 핑으로 데이터를 가져오는 아키텍처는 무용지물이다. 이런 상황이라 면 4GL 도구나 보고서 도구로 구현한 화면에서 바로 데이터를 가져 다가 보고서를 만들어 줘야 한다. 아무리 화려한 이론과 최신 기술로 무장한 아키텍처라고 해도 주어진 상황에 맞지 않는다면 말짱 도루묵 이다. 아키텍처는 실재로 프로젝트에 적용되어서 시스템으로 체화될 이해일 jongidal@gmail.com|저절로되는학문( )을연구하다가창조자의기분을느끼고싶 어만드는학문(工 )을업으로삼았다.현재Ubiqo대표로모은행국외전산시스템구축프로젝트에서 아키텍트로일하고있다. 훌륭한 아키텍처는 주어진 상황에 가장 적합한 아키텍처다. 상황에 가장 적합한 아키텍처는 책에서 구할 수 있는 것도 학교에서 배울 수 있는 것도 아니다. 현장에서 부딪히면서 만들어 낼 수 있는 것이다. 이번 기사를 통해 현장에서 얻은 경험을 바탕으로아키텍처링전반을살펴보고자한다. 화려하고 새로운 아키텍처의 유혹에서 벗어나라 아키텍트 편
  • 2. 화려하고 새로운 아키텍처의 유혹에서 벗어나라 마 이 크 로 소 프 트 웨 어 145 때만 유용성을 인정받을 수 있다. 주어진 상황에 딱 맞는 최적의 아키 텍처를 만들어 낸다는 실용주의 자세야 말로 아키텍트가 지켜야 할 금과옥조(金科 )인 것이다. 한 가지 주의해야 할 점이 있다면, 아키텍처는 제약일 수밖에 없고 인간은 제약받는 것을 싫어하기 때문에 아키텍트는 다양한 이해관계 자들로부터 아키텍처를 어기려는 수많은 도전을 받을 수밖에 없다는 것이다. 반복하지 말라는 DRY(Don’t Repeat Yourself) 원칙, 모듈 화의 원칙, 인터페이스 중심의 원칙같이 아키텍처가 주어진 상황과 관계없이 반드시 견지해야 할 원칙들은 존재하고 이 원칙 안에서 도 전을 받아들여야 한다. 이제부터 아키텍트가 아키텍처를 만들어가는 아키텍처링 과정을 책에 나온 이론이 아닌 현장에서 얻은 경험을 중심으로 이야기하려고 한다. 경험이 쌓이고 쌓이면 패턴이 된다고 한다. 이 경험이 독자 여 러분들의 경험과 더해져 훌륭한 아키텍처링 패턴을 만들어 낼 것을 기대해 본다. 피아식별( ) 장수가 전장에서 갖춰야 할 제일 기본은 아군을 인식하고 적군과 구 별해내는 것이다. 아키텍처링도 마찬가지다. 전 우주에서 우리가 다 뤄야 할‘우리 시스템’을 식별해 내고, 이렇게 식별한 우리 시스템과 상호 작용하는 다른 시스템들을 찾아내는 작업은 모든 아키텍처링의 시작이다. 그렇다면 어떤 기준으로 우리 시스템을 식별할 수 있을까? 기술 변 수도 아주 중요하지만, 프로젝트를 둘러싼 정치 변수들이 더 중요한 경우가 많다. 우리 시스템을 식별해내는 순간 프로젝트 범위가 결정 된다. 프로젝트 범위엔 많은 이해관계자들이 얽혀 있다. 이 이해관계 자들은 자신의 이해관계에 따라 정치활동을 펼친다. 정치라는 말에 알레르기 반응을 보일지도 모르지만, 아키텍트는 시스템의 기술 측면 을 대변하는 이해관계자로서 시스템이 바람직한 기술 구조를 가지도 록 다른 이해관계자들을 설득하고 조율하는 정치활동을 펼쳐야 한다. 때로는 이해관계자들의 이해가 상충하여 기술 측면에서 바람직하지 않은 방향으로 시스템의 범위가 결정될 수도 있지만, 이런 결정조차 아키텍트를 포함한 모든 이해관계자들이 찾아낸 합의점이라는 것을 인정하는 지혜가 필요하다. 보통 우리 시스템의 범위는 시스템을 구축하는 프로젝트의 책임 범위에 따라 결정된다. 은행 시스템을 구축한다고 해보자. 프로젝트 를 진행하면서 직접 구축해야 하는 부분은 분명히 우리 시스템의 한 부분이다. 또, 은행 공동망 시스템이나 신용카드 시스템은 우리 시 스템과 상호 작용해야 하는 다른 시스템인 것도 확실하다. 그런데 구분이 좀 모호한 것도 있다. 예를 들어, 보통 상용 제품을 구매해서 인터페이스만 맞춰서 쓰는 ATM과 새롭게 시스템을 구축하거나 기 존 시스템을 재활용하는 인터넷뱅킹은 우리 시스템일 수도 있고 다 른 시스템일 수도 있다. 어디에 속할 지는 프로젝트가 책임져야 하 는 범위에 따라 달라진다. 우리 시스템의 경계는 프로젝트가 책임 범위까지이고, 우리 시스템과 상호작용하는 다른 시스템은 관심 범 위까지라고 생각하면 된다(<그림 1>). 좀 더 단순하게 이야기하면, ATM 구매부터 책임진다면 우리 시스템 범위이고 프로젝트와 무관 하게 구매가 이루어진다면 상호작용해야 하는 다른 시스템으로 생 각하면 된다. 아키텍트는 우리 시스템은 내부까지 세세하게 다뤄야 하고 관심 범 위에 있는 다른 시스템은 상호작용 방식까지만 다루면 된다. 우리 시 스템의 범위는 제안요청서(RFP), 비전기술서, 프로젝트 계획서에 잘 드러나기 때문에 아키텍처링 작업 전에 반드시 확보하여 숙지할 필요가 있다. 고객만족(顧客 ) 아키텍트의 업종은 무엇일까? 대한민국에서 아키텍트는 서비스업으 로 분류된다. 그렇다. 아키텍트는 시스템을 둘러싼 다양한 이해관계 자들인 고객을 만족시켜야 하는 서비스 업자다. 그렇다면 어떻게 고 객을 만족시킬 것인가? 간단하다. 모든 서비스업이 그렇듯이 고객의 요구를 만족시키면 된다. 아키텍트는 시스템이 필요한 기능과 적절한 품질을 제공해야 한다는 고객의 요구를 만족시킬 수 있게 아키텍처를 만들어야 한다. 아키텍처는 시스템에 필요한 쓸모, 아름다움, 짜임새를 모두 다뤄 야 하지만, 보통 쓸모가 짜임새와 아름다움을 주도한다. 아키텍처가 고객이 원하는 쓸모를 충족시키지 못한다면 아무리 짜임새 있고 아름 <그림 1> 아키텍처링 시작하기 우주 관심 범위 우리 시스템 다른 시스템 다른 시스템 다른 시스템 다른 시스템 다른 시스템 다른 시스템 책임 범위 상호작용 상호작용 상호작용 상호 작용상호 작용 다른 시스템 다른 시스템
  • 3. 특집 부|아키텍트 편 146 2 0 0 5 . 1 2 다워도 아무 소용없다. 아키텍처는 고객이 원하는 쓸모를 충족시킬 수 있도록 아름다움과 짜임새를 결정하는 것이다(<그림 2>). 고객이 원하는 쓸모가 바로 고객의 요구로 유스케이스로 대표되는 기능 요구 와 품질로 대표되는 비기능 요구로 나눌 수 있다. 조금만 생각해보면 기능과 품질이 서로 밀접한 연관관계를 가지는 것은 아니라는 것을 알 수 있다. 만약 기능과 품질이 밀접한 연관이 있다면 시스템이 제공하는 기능에 따라 성능, 가용성, 사용성, 보안 수준 같은 품질이 결정되겠지만 그렇지 않다는 것을 우리는 잘 알고 있다. 그렇다고 해서 시스템이 무슨 기능을 제공하든지 원하는 수준 의 품질을 제공할 수 있다는 뜻은 아니다. 아주 많은 데이터를 근거로 아주 복잡한 계산을 하는 기능을 제공하면서 아주 빠른 성능을 내는 것은 거의 불가능하다. 아키텍트는 모든 유스케이스가 적절한 수준의 품질을 만족시킬 수 있도록 해주어야 한다. 흔히 아키텍처를 설명하면서 품질과 많이 연관시킨다. 맞다. 하지 만 아키텍처가 품질만을 다루는 것은 아니다. 다만 유스케이스로 대 표되는 기능 요구는 아키텍처를 기반으로 하는 개발을 통해 만족시킬 수 있지만 품질로 대표되는 비기능 요구는 주로 아키텍처가 만족시킬 수밖에 없기 때문에 품질이 강조되는 것뿐이다. 기능 요구는 명백하지만 비기능 요구는 모호할 수 있다. 예를 들어, 시스템은 높은 성능을 내야 한다는 말은 매우 모호하다. 어떤 상황에 서 얼마나 성능을 내야 한단 말인가? 또, 시스템은 유연하게 수정할 수 있어야 한다는 말도 의미가 없다. 어떤 종류의 변화에 대해서는 수 정할 수 있지만 어떤 종류의 변화에 대해서는 수정할 수 없을지도 모 른다. 또 비기능 요구사항들은 서로 상충할 수도 있기 때문에 모든 품 질 요구를 100% 만족시킬 수는 없다. 전체 품질은 각 품질의 목표를 적절한 수준에서 조율한 수준에서 결정된다. 품질 요구를 정확하게 판단하기 어렵기 때문에 <표 1>과 같은 품질 요구 질의서를 통해 품 질 요구를 정확하게 파악하는 것이 필요하다. 마지막으로 아키텍처만 잘 만든다고 모든 요구가 만족되는 것은 아 1 <표 1> 품질 요구 질의서 예 구분 ID 요구 사항 순위 상충 아키텍처 결정 장애 영향 최소화 AR 005 특정 지점의 장애가 다른 지점에 영향을 미치지 않아야 한다. 1 AR 015 웹서버, WAS, DB를 지점 별로 구성 AR 006 외부 시스템의 장애가 발생하더라도 5 대외 시스템에 장애가 발생하면 데이터를 보관해 놓았다가 업무 진행에 지장이 최소화되어야 한다. 장애 복구 후 일괄 처리 24x365 서비스 AR 008 ATM/인터넷 뱅킹은 중단없이 24x365 서비스를 제공한다. 4 D일자 마감 후 업무 원장 Snapshot을 기반으로 D일자 지점 MIS 업무를 수행하며, 마감 후 거래는 D+1일자로 업무 원장에 반영 AR 009 서비스 중단 없이 하드웨어를 교체할 수 있어야 한다. 3 하드웨어 이중화 AR 010 O/S 커널 파라미터 변경, WAS/DBMS 재 기동을 제외하고, 4 AR 011 하드웨어 이중화 서비스의 중단 없이 애플리케이션이나 대체 가능성이 높은 컴포넌트 단위로 배포 컴포넌트를 교체할 수 있어야 한다. Hot Deploy 제공 빠른 처리 속도 AR 011 온라인 거래와 온라인 배치는 1 AR 010 같은 기계 내부에서 EJB 호출을 최소화할 수 있는 아키텍처 제시 다음과 같은 시간 내에 처리 완료되어야 한다. - 내부 거래: 최대 7초, 평균 3~4초 - 원격 거래: 최대 10초, 평균 5~6초 AR 012 온라인 보고서 조회는 최대 60초 이내 처리 완료되어야 한다. 3 SQL 최적화 (구현으로 해결) AR 013 점포별 일일 마감을 포함한 일 배치 작업은 2 마감 배치 작업에 시스템 자원 최대 배정 점포별 30분 이내에 처리 완료되어야 한다. AR 014 영업시간 중 온라인 거래(ATM, IB 포함)와 2 트랜잭션 처리 단위 최적화 온라인 배치는 1초에 최대 25건의 거래를 처리해야 한다. 쉬운 유지보수 AR 015 변경 사항을 시스템에 반영하는 과정을 자동화해야 한다. 1 AR 005 자동 빌드, 배포 스크립트 제공 지점별로 시스템 설정에 걸리는 시간은 0.5M/H를 넘어선 안된다. <그림 2> 아키텍트가 다뤄야 할 것들 기능/비기능 요구사항 제공 의사소통 쓸모(고객) 짜임새(작업자) 설계 실현 전체 구조와 구성요소 결정 아름다움(아키텍트) 의사소통 의사소통
  • 4. 화려하고 새로운 아키텍처의 유혹에서 벗어나라 마 이 크 로 소 프 트 웨 어 147 니라는 것을 기억해야 한다. 프로젝트의 모든 공정이 기능과 품질에 영향을 미친다. 품질 요구 가운데 일부는 아키텍처 자체가 만족시키 기도 하지만 대부분 기능과 품질은 설계, 구현, 배치와 같은 세부 활 동의 결과물이기 때문에 끊임없는 활동결과 검토로 아키텍처를 유지 해 가는 것이 중요하다. 분할정복( ) 엔터프라이즈 시스템은 복잡하다. 수십 명에서 수백 명에 이르는 각 분야의 전문가들이 일 년 넘게 혼신을 쏟아야 완성될 정도로 복잡하 다. 아키텍트는 수많은 변수를 요모조모 따져서 이렇게 복잡한 엔터 프라이즈 시스템 구축에 필요한 최적화된 아키텍처를 만들어내야 한 다. 게다가 인간이 한 번에 다룰 수 있는 정보량은 지극히 한정되어 있기 때문에 아무리 뛰어난 아키텍트라도 엔터프라이즈 시스템을 통 째로 다루는 것은 거의 불가능하다. 다행히도 인류는 복잡한 문제는 이해하고 다룰 수 있는 크기로 나눈 다음 하나씩 정복하면 해결할 수 있다는 것을 오랜 경험으로 체득하고 있다. 아키텍처링도 마찬가지다. 우선 우리가 이해할 수 있는 수준에서 시작해야 한다. 앞서 이야기했듯이 무한히 복잡한 전 우주에서 우리 시스템을 분할해내야 한다. 아무리 복잡한 시스템이라도 아키텍처링 의 시작은 이렇게 단순하다. 일단 우리 시스템과 전 우주를 분할한 다 음 우리 시스템을 다시 이해할 수 있는 수준의 부분들로 분할해가면 서 부분들 사이의 인터페이스 방식을 정의하면 아키텍처는 완성된다. 결국, 아키텍처링이란 시스템을 몇 개 상자와 선으로 표현하는 것에 서 시작해서 이 상자 내부와 선을 구체화시켜 가는 과정이다. 카네 기-멜론 소프트웨어 엔지니어링 인스트튜트에서 주창한 ADD (Attribute-Driven Design, 속성 주도 설계) 방법이 되었든, 직접 고 안한 방법이 되었든 모든 아키텍처 수립 방법론은 결국 우리가‘그 냥’알고 있는 분할정복 전략을 체계화한 것이다(<그림 3>). 그렇다면 과연 어떤 기준으로 시스템을 분할해 갈 것인가? 다행히 도 이 기준은 선배 아키텍트들이 수십 년 동안 경험을 통해 마련해 놨 다. 우리는 이 경험을 고스란히 익혀서 새롭게 적용하면 된다. 이런 경험들을 고상한 말로 아키텍처 패턴이라고 한다. 우리 시스템 아키텍처 수립 방법론 우리 시스템 인터페이스인터페이스 인터페이스 모듈 모듈 모듈 모듈 모듈 모듈 <그림 3> 분할정복 전략 [ ADD방법의공정 ] ADD(Attribute-Driven Design, 속성 주도 설계) 방법의 공정은 <그림 1>과 같다. 아 키텍처 드라이브(Architecture Drive, 요구사항이라고 생각하면 된다)를 달성할 수 있 도록 아키텍처 패턴에 따라 시스템을 좀 더 작은 단위로 분할해 가면서 아키텍처를 설 계하는 것이다(<그림 2>). 자세한 내용은 www.sei.cmu.edu/architecture/add_method.html에서 살펴보 기 바란다. 현장에서 체득한 지식을 이론으로 무장해야 완벽에 가까워지는 법이다. 분할할 모듈을 선택한다 (전체 시스템에서 시작한다). 모든 모듈을 분할할 때까지 반복한다. 아키텍처 패턴을 선택해서 하위 모듈과 상호작용 방식을 결정한다. 유스케이스와 품질 속성을 정제하고 검증하여 하위 모듈의 제약 사항으로 만든다. 하위 모듈을 실체화하고 다양한 뷰를 통해 모듈에 기능을 할당한다. 하위 모듈의 인터페이스를 정의한다. 선택한 모듈이 달성해야 할 아키 텍처 드라이브를 나열하고 우선순 위를 매긴다. <그림 1> ADD 방법 공정 시스템 M1 M3 M3-1 M3-2 M4 M4-1 M4-3 M4-4 M4-2 M4-2-1 M4-2-2 M2 ADD ADD ADD ADD <그림 2> ADD 방법으로 시스템을 분할 정복하는 과정
  • 5. 특집 부|아키텍트 편 148 2 0 0 5 . 1 2 온고지신( 故 ) 게을러지고 싶은 아키텍트는 영악해지면 된다. 전문가들의 경험을 활 용하면 된다. 처음부터 다시 시작하지 마라. 하늘 아래 전혀 새로운 것 은 진짜 드물다. 전대미문의 시스템을 구축하는 일이 얼마나 있겠는 가? 오히려 그동안 운영되어 오던 엔터프라이즈 시스템을 개비(改 ) 하는 일이 많기 때문에 비록 구닥다리가 되어 버린 것 같은 기존 시스 템에서 수십 년 동안 쌓여 온 전문가들의 경험을 뽑아내야 한다. 컴포 넌트라고 이름을 붙이든 모듈이라고 이름을 붙이든 응집도를 높이고 결합도를 낮춰야 한다는 소프트웨어 공학의 기본 원리가 변하지 않듯 이 코볼로 만들었든 자바로 만들었든 시스템을 만드는 철학은 크게 다 르지 않다. 어떤 시스템이 수십 년 동안 특정한 모습으로 유지되어 왔 다면 다 나름대로 근거가 있고 이유가 있는 법이다. 아키텍트는 이 근 거와 이유를 검토하여 새롭게 구축하는 우리 시스템에 적용해야 한다. 그렇다면 대부분 엔터프라이즈 시스템에 적용할 수 있는 아키텍처 패턴은 무엇일까? 이 질문에 답하려면 아키텍처를 결정하는 가장 중 요한 아키텍처 드라이브가 무엇인지 생각해봐야 한다. 중요한 아키텍 처 드라이브인 기능과 품질 가운데 더 중요한 것은 기능이다. 아키텍 처는 우선 시스템에 필요한 모든 기능을 지원하는 기반을 제공해야 한다. 시스템에 필요한 기능을 모두 제공하지 못한다면 아무리 뛰어 난 품질을 제공한다고 한들 무슨 소용이 있겠는가?(그렇다고 품질을 무시하고 무조건 기능만 만족시키라는 의미는 아니다. 품질과 기능이 서로 밀접한 연관 관계를 가지는 것은 아니지만, 이 둘이 직교하는 (orthogonal) 관계는 아니다. 필요한 모든 기능을 만족할 만한 품질 로 제공해야 한다). 최초로 시스템을 분할할 때 기능성(functionality)이라는 아키텍처 드라이브를 기준으로 삼아야 한다. 지난 수십 년 동안 만들어진 대부분 엔터프라이즈 시스템은 제공하는 주요 기능에 따라 채널계, 계정계, 정 보계라는 세 가지 구성요소로 나눠지는 아키텍처 패턴을 따르고 있다. 은행 시스템을 예로 들어보자. 계정계는 주로 실시간 업무를 처리 하는 부분으로 업무 원장이라는 데이터를 중심으로 움직인다. 채널계 는 계정계에 접근하는 다양한 통로로 ATM이나 인터넷뱅킹 같은 별 도 시스템일 수도 있고 사용자가 조작하는 단말기일 수도 있다. 정보 계는 계정계에서 만들어진 데이터를 가공하여 보고서와 같은 정보를 생산한다. 시스템을 채널계, 계정계, 정보계로 분할하는 아키텍처 패 턴은 코볼로 시스템을 만들던 시대나 자바 EE(Java Enterprise Edition)로 시스템을 만드는 시대나 항상 유효하다. 또, 각 계 사이의 상호작용 방식은 기술과 시대의 변화에 따라 바뀔 수 있지만, 상호작 용하는 관계는 크게 변하지 않는다. <그림 4>를 굳이 레이어, 블랙보 드, 파이프와 필터 같은 잘 알려진 아키텍처 패턴에 끼워 맞출 수도 있지만 이 단계에서 큰 의미는 없는 작업이다. 채널계, 계정계, 정보계로 시스템을 나누는 것은 훌륭한 출발점이 될지는 모르지만 아직 실무자들이 받아들이기엔 너무 추상화 수준이 높다. 다시 적절한 아키텍처 패턴을 적용하여 각 계를 좀 더 작은 단 위로 분할해야 한다. 예를 들어 계정계를 다시 온라인 시스템, 일괄처 리 시스템, 대외 인터페이스 시스템으로 나누는 아키텍처 패턴을 적 용할 수 있다. 이 아키텍처 패턴 역시 기능성이라는 아키텍처 드라이 브를 가장 중요하게 고려한 것이다. 아키텍처가 이 정도 수준에 이르면 한 가지 모습으로 아키텍처를 파악하기 어려워지기 때문에 적절한 아키텍처 프레임워크 (Architectural Framework)를 참조해서 프로젝트 특성에 맞는 다 양한 관점(View)으로 시스템을 바라보면서 아키텍처를 만들어 가야 한다. <그림 5>는 그 동안 경험으로 얻은 아키텍처에 필요한 관점들 을 모아 놓은 것이다. 전체 아키텍처 관점은 우리 시스템 전체 윤곽을 <그림 4>의 수준에 1 [ 브라이언푸트의패턴이야기 ] 브라이언 푸트(Brian Foote)만큼 훌륭하게 패턴을 설명한 사람은 없는 것 같다. 게 으르고 영악한 건축가가 있었다. 어느 날 이 건축가가 대학 건물과 그 주변 통행로를 설계하게 되었는데 대학 건물만 설계하고 통행로는 방치한 채 게으름을 피웠다. 결국 통행로 없이 대학 건물만 지어졌지만 이 건축가는 여유만만이었다. 사람들은 정해진 통행로가 없었기 때문에 자기 좋을 대로 건물 주위를 돌아 다녔다. 겨울이 되었고 큰 눈이 내렸다. 이 건축가는 드디어 일을 시작했다. 사람들이 눈 위로 돌아다닌 발자국 들을 사진으로 찍었다가 봄이 되자 찍어 두었던 사진들을 보고 통행로를 설계했다. 이렇게 완성된 통행로는 다니기에도 편했고 주변 건물과도 잘 어울렸다. 패턴이란 바 로 이런 것이다. 패턴은 어떤 분야에서 계속 반복해서 나타나는 문제들을 해결해 온 전문가들의 경험을 모아서 정리한 것이다. 누가 뭐래도 대학 건물 주변의 동선( ) 을 제일 잘 알고 있는 전문가는 바로 매일 건물 주위를 돌아다니던 사람인 것이다. 게 으르고 영악한 건축가는 누가 전문가인지 잘 알고 있었고 전문가들의 경험을 활용한 것이다. 시스템 채널계 정보계계정계 온라인 시스템 대외 인터페 이스 시스템 일괄 처리 시스템 <그림 4> 대부분 엔터프라이즈 시스템에 적용할 수 있는 아키텍처 패턴
  • 6. 화려하고 새로운 아키텍처의 유혹에서 벗어나라 마 이 크 로 소 프 트 웨 어 149 서 설명한다. 다음으로 각 계의 구성요소를 대상으로 시스템 아키텍 처 관점과 소프트웨어 아키텍처 관점을 기술한다. 시스템 아키텍처 관점은 하드웨어와 네트워크 구성요소 사양과 구 성 방식(topology)을 주로 기술한다. 하드웨어나 네트워크 사양은 프 로젝트가 시작될 시점에 정해진 예산에 따라 어느 정도 결정되어 있 기 때문에 아키텍트가 프로젝트 기획 단계부터 참여하지 않는다면 시 스템 아키텍처를 설계할 때 많은 제약을 받을 수밖에 없다. 엔터프라 이즈 시스템 구축 프로젝트 생리상 하드웨어나 네트워크 사양이 딸려 서 문제가 되는 경우는 거의 없다. 문제는 하드웨어와 미들웨어 사이 의 궁합이나 개발한 소프트웨어에서 일어나는 경우가 대부분이다. 이 런 제약이 아키텍처링 전체에 위협을 가할 정도는 아니다. 하지만 시스템이 제공해야 하는 품질 가운데 많은 부분을 소프트웨 어로만 감당하기 힘들기 때문에 아키텍트는 하드웨어나 네트워크 관 련 지식도 많이 갖춰야 한다(박스 기사 참조). 가용성을 높일 수 있는 페일오버(Fail-over) 같은 기능은 하드웨어 수준에서 제공해주지 않 으면 거의 실현하기 어렵다. 또, 일일 마감 전에 대량 데이터를 복제 해야 한다면 저장장치 업체가 제공하는 제품을 쓰면 성능이나 데이터 일관성을 보장받기 쉽다. 아키텍트는 자신의 지식체계에 반드시 하드 웨어, 네트워크, 제품이라는 분류도 추가해야 한다. 소프트웨어 아키텍처 관점은 직접 개발할 소프트웨어나 기존 소프 트웨어의 다양한 모습을 기술한다. 이때 적용할 기술 구조가 어느 정 도 결정되어 있다면 각 기술 구조마다 검증된 아키텍처 패턴이 이미 존재하고 있기 때문에 아키텍트는 좀 더 게을러질 수 있다. 물론 MDA 같이 기술 중립 아키텍처를 설계하는 방법도 있지만, 결국 시 스템을 완성하려면 특정 기술 구조를 적용해야 하고 아키텍처가 제공 해야 하는 특정 품질 요구를 만족시키려면 특정 기술에 종속된 기능 을 반드시 써야 하는 경우가 많다. 온라인 시스템의 소프트웨어 아키텍처 관점을 좀 더 살펴보자. 실 시간 거래를 담당하는 온라인 시스템의 아키텍처는 레이어드 (Layered) 아키텍처 패턴을 따르는 것이 좋다. 단, 실무에 적용해보 면 책에서 본 것 같은 단순한 평면 레이어 구조로는 엔터프라이즈 시 스템을 설명하는 것은 어렵다. 적어도 업무 관점으로 바라본 레이어 와 구현 관점에서 바라본 레이어를 고려해야 한다(<그림 6>). 업무관점에서보통<표2>와레이어를같이나눌수있다(레이어이름 은 정해진 표준이 있는 것이 아니라 흔히 쓰이는 이름을 붙인 것이다). 또, 구현 관점에서 <표 3>과 같이 레이어를 나눌 수 있다. 레이어 이 름은 기존에 여러 대가들이 붙였던 이름들을 종합해서 결정한 것이기 때문에 독자들이 알고 있는 이름과 다룰 수도 있다. 비록 이름은 다르 더라도 레이어가 해야 하는 역할은 변함없다. 각 레이어 내부 역시 적절한 패턴을 적용해서 분할해가면서 정복해 전체 아키텍처 관점 시스템 아키텍처 관점 모듈 관점 구성 관점 … 논리 관점 구현 관점 배치 관점 … 모듈 관점 상호작용 관점 메커니즘 관점 … 소프트웨어 아키텍처 관점 <그림 5> 아키텍처를 기술하는 다양한 관점 [ 시스템아키텍처에관련된정보 ] 소프트웨어 아키텍처에 비해 시스템 아키텍처와 관련된 정보는 흔하지 않지만 다음 사이트에서 찾아 볼 수 있다. ◆ www.gaudisite.nl ◆ www.enterpriseintegrationpatterns.com ◆ www-128.ibm.com/developerworks/patterns 업무 관점 단위 업무 레이어 공통 업무 레이어 애플리케이션 프레임워크 레이어 비즈니스 프레임워크 레이어 업무 레이어 프리젠테이션 레이어 애플리케이션 레이어 비즈니스 레이어 커넥터 레이어 개 발 관 점 리소스 레이어 <그림 6> 레이어드 아키텍처 예제 <표 2> 업무 관점에서의 레이어 구성 내용 애플리케이션 프레임워크 레이어 기술 기반 기능을 제공한다. 애플리케이션 프레임워크 레이어 업무 기반 기능을 제공한다. 업무 파티션 레이어 실제 업무 기능을 제공한다. 공통 업무 기능을 제공하는 코어 업무 파티션과 나머지 일반 업무 기능을 제공하는 단 위 업무 파티션으로 나눌 수 있다.
  • 7. 특집 부|아키텍트 편 150 2 0 0 5 . 1 2 야 한다. 이 수준부터 적용되는 아키텍처 패턴은 좀 더 특정 분야에 특화된다. 업무 관점은 샌프란시스코 비즈니스 패턴(SanFrancisco Business Patterns) 같은 범용 비즈니스 패턴이나 업무 전문가들이 경험으로 체득한 패턴들을 적용해서 작성한다. 예를 들어, 은행애서 회계처리가 일어나는 연동 거래 업무 패턴은 <그림 7>과 같다. 또, 기술 관점은 Pattern of Enterprise Architecture, EJB Design Pattern, Core Java EE Pattern, Enterprise Solution Patterns Using Microsoft .NET과 같은 패턴들을 응용하여 작성한다. <그림 8>은 비즈니스 레이어 구현 패턴 예제이다. 좀 더 깊숙이 들어가면 트랜잭션 처리, 동시성 제어, 가변성 제어, 세션 제어 같은 상세한 사항을 해결할 수 있는 메커니즘을 제시해야 한다. 이 메커니즘을 제시하려면 아키텍트는 프로젝트에 적용한 표준 기술(예를 들어 자바 EE, 닷넷, CORBA)을 잘 알아야 할 뿐 아니라 웹 서버, 웹 애플리케이션 서버, 데이터베이스, 운영체제 같은 플랫폼 의 특성도 상당히 깊이 이해하고 있어야 한다. 지금까지 시스템을 점차 작은 부분으로 나눠가면서 적절한 수준의 패턴을 적용해서 아키텍처를 만드는 방법을 살펴보았다. 이런 환원주 의( )는 주의해야 할 점이 있다. 전체는 부분의 합보다 크다 는 것을 잊지 말아야 한다는 것이다. 부분 부분은 완벽할 수 있어도 한 데 모아놓으면 서로 상충하는 부분이 생길 수 있고 직교한다고 생 각했던 부분들이 서로 영향을 미칠 수도 있다. 따라서 부분을 바라보 고 일을 할 때도 항상 전체를 생각할 수 있어야 한다. 또 하나 강조하고 싶은 것은 기술 순혈주의( )에 빠지지 말라 는 것이다. 방대한 엔터프라이즈 시 스템을 단일한 기술로 균질하게 (Homogeneous) 만들 수 없을지도 모른다. 다양한 기술과 다양한 품질 요구를 만족시키려면 가장 적절한 기술 구조를 적용해야 한다. 물론 유 지보수도 쉽고 인력수급도 쉽고 개 발 난이도도 낮아지기 때문에 단일 한 기술로 균질하게 시스템을 만드 는 것이 제일 좋다.‘적절한’이란 말 은 유지보수, 인력수급, 개발 난이 도, 기능, 성능 등 이 모든 것을 고려 해서 결정을 내리라는 뜻이다. 온라 인 시스템은 자바 EE로, 터미널은 VB.Net으로, 커넥터는 유닉스 C로 1 <표 3> 구현 관점에서의 레이어 구성 내용 프리젠테이션 레이어 뷰(View). 액터-시스템 인터페이스를 제공한다. 채널계 쪽으로 빠질 수도 있다. 애플리케이션 레이어 프리젠테이션 레이어와 비즈니스 레이어를 연결한다. 외부 시스템으로부터 요청을 받아들인다. 비즈니스 레이어 컨트롤(Control). 제공해야 하는 서비스를 실행한다. 커넥터 레이어 다른 레이어를 리소스 레이어나 외부 시스템과 연결한다. 리소스 레이어 모델(Model). 시스템이 다루는 정보를 관리한다. � 최종 거래 요청 � 분개 화면 생성 � 분개 정보 전달 � 거래 요청 � 거래 요청 � 회계 처리 요청 � 단위 업무 처리 � 회계 처리 � 연동 거래 실행 � 트랜잭션 번호 반환 � 전표 번호 반환 � 승인 요청 � 거래 결과 반환 � 분개 화면 생성에 필요한 정보 요청 � 분개 화면 생성 정보 반환 단위 업무 화면 분개 화면 승인 회계단위 업무 단위 업무 <그림 7> 업무 패턴 예제 비즈니스 컴포넌트 <<Pattern>> 서비스 퍼서드 (Service Fasade) <<Pattern>> 리소스 엑세스 커넥터 리소스 <<Pattern>> 서비스 델리게이트 <<Pattern>> 애플리케이션 서비스 <<Pattern>> 데이터 전달 객체 외부 시스템 다른 비즈니스 컴포넌트 <<Pattern>> 비즈니스 인터페이스 <<레이어>> 비즈니스 <<레이어>> 커넥터 <<레이어>> 리소스 <그림 8> 비즈니스 레이어 구현 패턴 예
  • 8. 화려하고 새로운 아키텍처의 유혹에서 벗어나라 마 이 크 로 소 프 트 웨 어 151 구현할 수 있다. 심지어 온라인 시스템 안에서도 화면 조회 같은 특정 업무는 보고서 도구로 구현할 수도 있다. 세상은 어차피 비균질 (Heterogeneous)하다. 교조주의에 빠지지 않도록 주의하라. 이런 과정을 거쳐 완성된 아키텍처를 고객이 가장 쉽게 이해하고 적용할 수 있는 방법을 찾아야 한다. 아키텍처 기술서 전달과 아키텍 처 교육은 필수이고 대부분 작업 지침서와 예제까지 제공한다. 아키 텍처는 프로젝트 참여자들의 자유를 규제하고 규제라는 것은 작업 속 도만 놓고 보면 분명 걸림돌이다. 따라서 고객의 생산성을 높일 수 있 는 도구들을 제공해 줄 필요가 있다. <그림 8>과 같은 구현 패턴이 결 정되면 구현 패턴에 맞춰 골격 코드를 만들어 낼 수 있는 코드 생성기 를 제공하는 것이 좋다. 코드 생성기는 시스템 자체의 품질뿐만 아니 라 아키텍처 자체의 품질도 높을 수 있는 도구이다. 예를 들어, 데이 터 중심 시스템이라면 <그림 9>와 같이 데이터베이스로부터 자동으 로 데이터 접근 객체(DAO, Data Access Object)와 데이터 전달 객 체(Data Transfer Object)를 만들어 주는 코드 생성기를 제공하여 생산성을 크게 향상시킬 수 있다. 심신단련( ) 마지막으로 인간으로서, 직업인으로서 아키텍트를 이야기하고 싶다. 아키텍트는 완벽을 추구해야 한다. 아키텍트가 기침하면 프로젝트 전 체가 독감에 걸릴 수도 있기 때문이다. 혹시라도 작은 실수를 했다면 발견한 즉시 실수를 인정하고 바로 잡아야 한다. 아무리 작은 실수라 도 묻어둔다면 전체 프로젝트 참여자가 작업을 진행하면 할수록 문제 가 쌓이고 쌓여 나중엔 바로 잡을 수 없는 지경에 이를 수도 있다. 아키텍트는 항상 겸허하고 유연해야 한다. 아무리 오래된 기존 시 스템에서도 장점을 찾아서 받아들일 수 있어야 하고, 업무 전문가들 이 수년간 일해온 방식에서 패턴들을 찾아낼 수 있어야 한다. 아키텍 트는 다양한 가능성 가운데 최적의 답을 찾아낼 수 있도록 어떠한 정 치 요소에도 흔들리지 않고 결단을 내릴 수 있어야 한다. 아키텍트는 프로젝트의 기술 분야를 책임지는 CTO라 할 수 있다. 기술 분야에서 는 최고 권위를 가지고 결단내려야 한다. 아키텍트는 IT 기술뿐만 아니라 직업인의 기본기를 충분히 갖춰야 한다. 조직이 개인의 자질을 체계적으로 키워주지 않는 환경에서 일 하는 안타까운 현실에서 우리는 직업인으로서 기본기를 스스로 갖출 수밖에 없다. 아키텍트가 상대해야 하는 고객은 프리젠테이션 기술, 외국어, 커뮤니케이션, 보고서 작성과 같은 직업 기본기가 충실한 사 람들이기 때문이다. 결국 아키텍처링도 시스템 구축도 사람들이 모여 서 하는 일이기 때문에 사람과 사람 사이의 관계를 유지하는 기술이 전문기술보다 훨씬 더 중요할 수 있다는 것을 잊지 말자. 일천 아키텍처 양병설을 주장하며 시스템이 새로운 사업 영역을 만들어 내는 비즈니스 인에이블러 (business enabler)를 넘어 사업을 이끌어 가는 비즈니스 드라이버 (business driver)가 되어버린 지 오래고 아키텍처는 시스템의 성공 을 좌우하는 가장 중요한 요소 가운데 하나다. 이런 현실에서 뛰어난 아키텍트를 양성하는 것은 국가의 대사가 아닐 수 없기에 감히 일천 ( ) 아키텍처 양병( )을 주장하고 싶다. 훌륭한 아키텍트가 많 은 나라를 꿈꿔본다. 정리 | 김세미 | semsem@imaso.co.kr m aso 설정 파일(.xml) 코드 템플릿(.vm) 데이터베이스 코드 생성기 DAO 코드 DTO 코드 <그림 9> 아키텍처의 품질을 높이는 코드 생성기 예 아 키 텍 트 지 침 15 1. 전 우주에서 우리 시스템을 식별해내고 우리 시스템과 상호작용하는 다른 시스 템을 찾아내는 것에서 아키텍처링을 시작하라. 2. 때로는 기술보다 정치가 훨씬 더 중요하다는 것을 명심하라. 3. 아키텍트는 서비스 업자다. 고객의 요구를 정확히 판단하여 고객을 만족시켜라. 4. 복잡하다면 다룰 수 있는 수준으로 나눠라. 아키텍처링은 상자 몇 개, 선 몇 줄 을 구체화해 가는 과정이다. 5. 아키텍처는 모든 유스케이스가 적절한 수준의 품질을 만족시키며 실현될 수 있 게 만들어져야 한다. 6. 가장 중요한 아키텍처 드라이브는 기능성이다. 7. 현장에서 체득한 지식을 이론으로 무장해야 완벽해진다. 8. 원리는 변하지 않는다. 방식이 변할 뿐이다. 옛 것을 익혀 새롭게 만들어라. 기 존 시스템에 녹아있는 선배들의 귀중한 경험을 새로운 시스템에 적용하라. 9. 다양한 관점으로 시스템을 바라보라. 10. 지식체계에 하드웨어, 네트워크, 제품을 집어넣어라. 11. 환원주의의 맹점을 주의하라. 12. 기술 순혈주의를 경계하라. 13. 아키텍처 자체의 품질을 높여라. 14. 인성과 업무 기본기를 익혀라. 15. 아키텍처링도 결국 사람들이 모여서 하는 일이라는 것을 잊지 마라.